架构师之路012 同步互斥

线程

原子操作

互斥体

等待组

条件变量

管道

消息传递

原子操作是cpu提供的能力 与操作系统无关

不会中途被人打断

一般就是lock unlock

锁的确会导致代码串行执行 并发度非常高的情况下 串行性能会显著降低

比锁快的 只有原子操作

channel 的每个操作必然是有锁的 每个操作都比较耗时

锁最大的问题 就是不容易控制

go 语言 有defer 语法保证配对

锁不容易控制的另一个表现是 锁粒度的问题

网络io少数特殊情况下 可能会出现慢请求 需要好几秒才返回 对服务器来说 好像是挂了 无法处理请求

不要在锁里执行耗时的操作

绝大部份只放读操作 少量情况写操作

读写锁

写操作挡在外面 等待读操作执行完

读操作不阻止读操作

阻止写操作

写操作 阻止一切 不管是读操作还是写操作

条件变量强大到channel 这样的通讯机制都可以用它来实现

初始化传入一个互斥体

如何在执行体之间发送消息

管道

管道的用处有很多 一个比较常见的用法是读写转换

go 语言引入的channel 也是管道 只不过是类型安全的管道


锁在一些人的心中是有误解的 实际上锁在服务端编程中的比重并不低

条件变量是最复杂的同步原语 功能强大 值得细细体会

信号量被条件变量所取代了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值