序对于Golang来说,原生支持并发是它的一个强项。并且在项目业务中,很多时候需要用到goroutine去并发的处理业务,多个goroutine之间需要同步与通信,主goroutine需要控制它所属的子goroutine。对于这种情况其实还是很常见的,那么下面我们专门介绍实现多个goroutine间的同步与通信。同步与通信解决方法全局共享变量(共享内存)channel通信(CSP模型)Context包全局共享变量(共享内存)通过一个变量控制所有的子goroutine开始和结束,并不断的去轮询这个变量检查是否有更新,如果子goroutine检测到这个变量有更新就会执行对应的业务逻辑。对于同步与通信来说,共享变量是一个最简单的一个方案,但是在功能上确实有着显著的缺点:全局变量不是线程安全,需要处理竞争关系,所以我们需要对这个变量加锁处理,这样就增加的复杂度,并且过多的锁,容易死锁。排查起来也很困难全局变量传递的数据信息较小,所以它不适用于子goroutine间的通信因为单向通知的原因,主goroutine无法等待所有的子goroutine退出示例:var signal = true fun
青丝南开
文字、摄影、骑行爱好者