美文网首页go学习Golang语言社区
简单的并发控制 —— WaitGroup

简单的并发控制 —— WaitGroup

作者: liuliqiang | 来源:发表于2017-11-06 09:22 被阅读44次

声明:本文仅限于简书发布,其他第三方网站均为盗版,原文地址: 简单的并发控制 —— WaitGroup

在 golang 中,我了解的并发同步主要有两种方式,一种是 channel,另外一种就是我想说的 WaitGroup。Channel 大家都比较常见了,是 golang 中大家常说的 三驾马车 之一,这个我先不说,今天我想说说 WaitGroup 这兄弟。

WaitGroup 在 golang 中很简单,API 甚至只有可怜的三个,但是,功能却挺好用,甚至于都可以说可以省略到两个。下面我先来说说 WaitGroup 有什么用,或者说一个简单的用法是啥。

goroutine 监测

在使用 golang 中的 goroutine 的时候,有一个细节很容易被新手忽略,那就是很容易就让 主goroutine 返回了,从而导致其他的 goroutine 都被关闭了,也就没有所谓的并发了。很多新手为了防止 main goroutine 先返回,可能会使用这样的一段代码 goplay

但是这段代码不是很友好,因为假设有某个 test 调用崩溃之后,那么其他执行 test 的 goroutine 可能就会永久卡住了,这在 golang 里面称为 goroutine泄露。如果此时,我们换用 WaitGroup,那么代码就会更友好一些了 goplay

这就是简单的一个 WaitGroup 的使用方式,它在每个 goroutine 启动前增加一个计数,同时在每一个 goroutine 结束时递减计数。前面说了,它就只有 3 个简单的方法,分别是:

  • Add(delta int):增加/减少若干计数
  • Done:减少 1 个计数,等价于 Add(-1)
  • Wait:卡住,直到计数等于 0

就是这么一个简单的组合,让我们在 goroutine 同步时能够启动非常大的帮助作用,而且在日常使用中也是很常用到。

Reference

  1. How to Wait for All Goroutines to Finish Executing Before Continuing
  2. WaitGroup 指导
  3. WaitGroup Docs

相关文章

  • Go并发控制简明教程-WaitGroup和Context简明教程

    控制并发的两种方式 使用WaitGroup 使用Context WaitGroup简单例子 使用WaitGroup...

  • 简单的并发控制 —— WaitGroup

    声明:本文仅限于简书发布,其他第三方网站均为盗版,原文地址: 简单的并发控制 —— WaitGroup 在 gol...

  • Go context

    控制并发有两种经典的方式:WaitGroup和Context WaitGroup:控制多个Goroutine同时完...

  • (八)golang WaitGroup 源码分析

    1 前言 WaitGroup是Golang应用开发过程中经常使用的并发控制技术。WaitGroup,可理解为Wai...

  • Go Context的使用

    控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context WaitGroup的使用 Wait...

  • 并发

    控制并发有两种经典方式, WaitGroup:控制多个goroutine同时, var wg Sync.waitG...

  • GO

    WaitGroup 实现并发控制image.png Add与Done应该放在哪? - Add放在Goroutine...

  • sync.WaitGroup

    sync.WaitGroup 是控制一组 goroutine 的并发控制技术 信号量信号量是UNIX 系统提供的一...

  • Golang并发模型

    控制并发有三种种经典的方式,一种是通过channel通知实现并发控制 一种是WaitGroup,另外一种就是Con...

  • go 中的 Context

    Go 语言的context 是应用开发常用的并发控制技术,它与 waitGroup 最大的不同点是 contex...

网友评论

    本文标题:简单的并发控制 —— WaitGroup

    本文链接:https://www.haomeiwen.com/subject/wdvkmxtx.html