你知道几种Go并发控制方式?

本文探讨了Go语言中三种常见的goroutine并发行为控制方式:WaitGroup用于协同工作并等待所有任务完成;Channel结合select提供优雅的goroutine结束通知;Context则在多层级goroutine间传递取消信号,实现资源回收。了解这些机制有助于在不同场景选择合适的并发控制策略。
摘要由CSDN通过智能技术生成

引言

Golang中通过go关键字就可开启一个goroutine,因此,在Go中可以轻松写出并发代码。但是,如何对这些并发执行的groutines有效地控制?

提到并发控制,很多人可能最先想到的是锁。Golang中同样提供了锁的相关机制,包括互斥锁sync.Mutex,和读写锁sync.RWMutex。除了锁,还有原子操作sync/atomic等。但是,这些机制关注的重点是goroutines的并发数据安全性。而本文想讨论的是goroutine的并发行为控制。

在goroutine并发行为控制中,有三种常见的方式,分别是WaitGroup、channel和Context。

WaitGroup

WaitGroup位于sync包下,它的使用方法如下。

func main() {
   
  var wg sync.WaitGroup

  wg.Add(2) //添加需要完成的工作量2

  go func() {
   
    wg.Done() //完成工作量1
    fmt.Println("goroutine 1 完成工作!")
  }()

  go func() {
   
    wg.Done() //完成工作量1
    fmt.Println("goroutine 2 完成工作!")
  }()

  wg.Wait() //等待工作量2均完成
  fmt.Println("所有的goroutine均已完成工作!")
}

输出
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值