并发:同步

同步概况

同步是并发最后一个环节。

当两个并发单元共享同一个数据的时候需要同步处理。这里的并发单元不限于进程中的两个线程,也可能两个进程,甚至两台服务器。同步处理不局限共享同一块内存,当两个进程共享同一个文件给文件加锁都是同步处理,在数据库中启动一个事务或者启动乐观锁都是同步处理。共享同一资源产生数据竞争都需要做同步处理。

标准库 sync 包专门用来做同步的,它由条件、锁,锁分为互斥和读写,WaitGroup 等组件构成。任何一种语言的同步组件使用频率非常高,性能要求非常苛刻,设计上都会非常精巧。平时写业务代码只是为了完成逻辑,但是像同步这种偏系统型的代码实现有很多很精巧的设计,我们去设计粒度会更粗糙不会有这么精巧。所以对于同步代码阅读和学习有助于开阔对代码控制能力的眼光。

不同的同步方式

在不同场景选择合适的同步方式。

  • channel:存在生产、消费等不同角色。
  • mutex:相同角色间的逻辑竞争保护。
  • atomic:单数据。

通常情况下同步使用官方提供的标准方案,不使用系统层面做同步,因为系统层面有系统调用的问题。在运行时层面包装也有很多的限制。我们使用 goroutine 模型标准做法倾向官方提供的一些解决方案。因为官方提供的解决方案和运行时协调始终会保证向下兼容。所以一般建议不要使用第三方框架做同步,因为多数情况下的性能问题是架构设计和核心算法,逻辑代码太烂也不至于产生瓶颈级别的问题。

通道基于设计层面或者架构层面,比如把逻辑拆分成生产、消费等不同角色,或者利用通道实现定义好的一些编排,比如同时处理文件从架构设计上使用通道处理考虑读取和处理分开提高它的效率。通道实际上使用的层面比较高,更倾向设计层面,相当于架构里面选择 Ka

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值