官术网_书友最值得收藏!

Concurrent task execution

In the final output of the previous section, we can see that all the tasks in listOfTasks are being executed in serial order, and the last step for maximum concurrency would be to let the order be determined by Go runtime instead of the order in listOfTasks. This might sound like a laborious task, but in reality this is quite simple to achieve. All we need to do is add the go keyword in front of task(&waitGroup):

func main() { 
    var waitGroup sync.WaitGroup 
    // Set number of effective goroutines we want to wait upon 
    waitGroup.Add(len(listOfTasks)) 
 
    for _, task := range listOfTasks { 
        // Pass reference to WaitGroup instance 
        // Each of the tasks should call on WaitGroup.Done() 
        go task(&waitGroup) // Achieving maximum concurrency 
    } 
 
    // Wait until all goroutines have completed execution. 
    waitGroup.Wait() 

Following is a possible output:

Listened to 10 minutes of audio book.
Done listening to audio book.
Done booking flight tickets.
Done ordering a dress.
Done paying Credit Card bills.
Wrote 1/3rd of the mail.
Wrote 2/3rds of the mail.
Done writing the mail.
Done making hotel reservation.

If we look at this possible output, the tasks were executed in the following order:

  1. Listen to audiobook.
  2. Book flight tickets.
  3. Order a dress.
  4. Pay credit card bills.
  5. Write an email.
  6. Make hotel reservations.

Now that we have a good idea on what concurrency is and how to write concurrent code using goroutines and WaitGroup, let's dive into parallelism.

主站蜘蛛池模板: 赤城县| 松原市| 香港| 余庆县| 平塘县| 兴安盟| 平遥县| 冀州市| 兰溪市| 营山县| 中超| 固始县| 承德市| 徐州市| 五原县| 靖宇县| 尼勒克县| 屏东县| 南召县| 安仁县| 卓尼县| 靖安县| 马边| 石渠县| 芮城县| 濮阳市| 闸北区| 松潘县| 肇州县| 合作市| 清水河县| 昌都县| 酉阳| 曲周县| 常山县| 城固县| 申扎县| 三门峡市| 永济市| 大埔区| 成安县|