Golang并发控制

开发 go 程序的时候,时常需要使用 goroutine 并发处理任务,有时候这些 goroutine 是相互独立的,需要保证并发的数据安全性,也有的时候,goroutine 之间要进行同步与通信,主 goroutine 需要控制它所属的子goroutine。前者并发数据安全依赖锁机制和原子操作,包括互斥锁 sync.Mutex,读写锁 sync.RWMutex,原子操作sync/atomic等,后者涉及到并发行为控制,并发行为控制有三种常见的方式,分别是 WaitGroup,Channel,Context。

1.数据安全性控制(data race)

  • 互斥锁 sync.Mutex
  • 读写锁 sync.RWMutex
  • 原子操作 sync/atomic

2.并发 gorutine 行为控制

  • sync.WaitGroup(等待所有 goroutine 全部结束)
  • channel(可以用有缓冲队列控制 goroutine 的数量,可以用 channel+select 实现 goroutine 间的消息通知)
  • Context(web 场景中,树状的调用结构下,各 goroutine 间消息同步(退出、超时等),父 context 通知所有子 context)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终生成长者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值