Day 18 wait group 的使用

Wait group

wait group 通常用来等待一组 goroutine 完成工作。
wait group 维护了一个 counter,并且依据 counter 的数字来控制 goroutine。透过三个操作来控制

  • Add(delta int): 将 counter 加 delta。如果 counter 变为 0,被 Wait() 所挡住的 goroutine 将会放行。
  • Done(): 将 conter 减 1,其实它的实作就是 Add(-1)。
  • Wait(): 一直等待,直到 counter 变为 0。

以下给一个程序的例子,定义一个 worker,并且让五个 worker 做事,五个 worker 做完事情後,counter 一定为 0,这时正在 wait 的 main goroutine 才会继续执行。

func worker(id int) {
    fmt.Printf("Worker %d starting\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Worker %d done\n", id)
}
func main() {
    var wg sync.WaitGroup
    for i := 1; i <= 5; i++ {
        wg.Add(1)
        i := i
        go func() {
            defer wg.Done()
            worker(i)
        }()
    }
    wg.Wait()
}

 在 go 里很常使用到错误处理,但是 wait group 本身并没有支援错误处理流程,自己设计错误处理又很容易犯错。errgroup package 就可以解决这个问题。而且 errgroup 同时支援 context 的做法,下一次就来写 errgroup 吧

Reference


<<:  [iT铁人赛Day20]JAVA学习心得

>>:  4. Senior 工程师是什麽样的角色?

30-9 之Presentation Layer - MVP ( Model-View-Presenter )

接下来我们来谈谈 MVP ( Model-View-Presenter ),在知道 MVC 也只是在...

Docker - Docker 执行 Maven

Docker - Docker 执行 Maven 参考资料 Docker 指令参考: [小抄] Do...

从零开始学3D游戏设计:基础粒子效果

这是 Roblox 从零开始系列,在效果章节的单元,今天你将学会如何透过粒子发射器来做出基本的粒子特...

DAY 22 『 连接 API 实作 - 天气 APP 』Part4

昨天介绍了如何将资料显示在手机画面上,今天会介绍如何辨别点选到哪一个城市,以及将城市天气资讯回传到手...

编写有效的用户故事 (user stories)

如何编写有效的用户故事? 用户故事是一种捕捉早期需求的强大技术。用户故事捕捉了需求的 WHO、WHA...