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

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.

主站蜘蛛池模板: 靖西县| 卓资县| 靖安县| 建平县| 南澳县| 太白县| 万荣县| 奉化市| 磐安县| 大悟县| 遂宁市| 千阳县| 成都市| 裕民县| 康乐县| 双柏县| 邵东县| 恩平市| 琼海市| 古浪县| 曲阜市| 宾阳县| 石门县| 马尔康县| 托克逊县| 镇江市| 梅河口市| 平邑县| 光泽县| 乐至县| 镇康县| 嘉黎县| 花垣县| 犍为县| 通化县| 静海县| 清流县| 达孜县| 兴隆县| 即墨市| 南充市|