当前位置: 首页 > news >正文

Go 语言任务编排 WaitGroup

        WaitGroup 是常用的 Go 同步原语之一,用来做任务编排。它要解决的就是并发-等待的问题: 现在有一个 goroutine A 在检查点 ( checkpoint ) 等待一组 goroutine 全部完成它们的任务,如果这些 goroutine 还没全部完成任务,那么 goroutine A 就会被阻塞在检查点,直到所有的 goroutine 都完成任务后才能继续执行。

        我们来看一个使用 WaitGroup 的场景。

        比如,我们要完成一个大任务,需要使用并行的 goroutine 执行三个小任务,只有这三个小任务都完成了,才能执行后面的任务。如果通过轮询的方式定时询问三个小任务是否完成,则会存在两个问题:一是性能比较低,因为三个小任务可能早就完成了,却要等很长时间才能被轮询到;二是会有很多无谓的轮询,空耗CPU资源。

        这个时候使用 WaitGroup 同步原语就比较有效了,它可以阻塞等待的 goroutine,等到三个小任务都完成了,再即时唤醒它们。 其实,很多操作系统和编程语言都提供了类似的同步原语,比如 Linux 中的 barrier、Pthread(POSIX 线程)中的 barrier、C ++ 中的 std::barrier、Java 中的 CyclicBarrier 和 CountDownLatch 等。

1. WaitGroup 的使用方法

        在 Go 官方提供的同步原中,最常用的几个类型使用起来很简单,这是很不容易的设计。WaitGroup 就是简单且常用的同步原语之一,它只有三个方法。

  • Add(delta int): 给 WaitGroup 的计数值增加一个数值, delta 可以是负数。当 WaitGroup 的计数值减小到 0 时,任何阻塞在 Wait( )方法上的 goroutine 都会被解除封印,不再阻塞,可以继续执行。如果计数器的值为负数,则会出现 panic。
  • Done( ):表示一个 goroutine 完成了任务,WaitGroup 的计数值减 1。
  • Wait( ): 此方法的调用者会被阻塞,直到 WaitGroup 的计数值减小到 0。

        WaitGroup 的功能就是等待一组 goroutine 都完成任务。一般主 g

http://www.lryc.cn/news/406398.html

相关文章:

  • 星环科技推出知识库产品 AI PC时代数据交互方式变革
  • 10道JVM经典面试题
  • Redisson常用的数据结构及应用场景
  • 【实现100个unity特效之8】使用ShaderGraph实现2d贴图中指定部分局部发光效果
  • Ubuntu 24.04 LTS Noble安装Docker Desktop简单教程
  • XML 和 SimpleXML 入门教程
  • leetcode--链表类题目总结
  • 打卡第22天------回溯算法
  • Ubuntu对比两个文件内容有什么区别?
  • python:本机摄像头目标检测实时推理(使用YOLOv8n模型)
  • Spark实时(四):Strctured Streaming简单应用
  • SpringBoot上传超大文件导致OOM,完美问题解决办法
  • PyTorch 的各个核心模块和它们的功能
  • Java开发之LinkedList源码分析
  • 外卖霸王餐系统架构怎么选?
  • AV1技术学习:Transform Coding
  • Git操作指令
  • CSS 创建:从入门到精通
  • Windows 11 系统对磁盘进行分区保姆级教程
  • 探索WebKit的CSS盒模型:深入理解Web布局的基石
  • c++初阶知识——string类详解
  • php接口返回的json字符串,json_decode()失败,原来是多了红点
  • Python3网络爬虫开发实战(2)爬虫基础库
  • el-image预览图片点击遮盖处关闭预览
  • 基于Neo4j将知识图谱用于检索增强生成:Knowledge Graphs for RAG
  • 康康近期的慢SQL(oracle vs 达梦)
  • 探索 GPT-4o mini:成本效益与创新的双重驱动
  • 2.6基本算法之动态规划2989:糖果
  • 12.顶部带三角形的边框 CSS 关键字 currentColor
  • Llama中模块参数大小