里程焦虑的慢速通道:笨叔讲解QSpinLock源代码

QSpinlock申请锁的过程,可以分成快速通道,中速通道,和慢速通道总结一下。

  1. 快速通道:有点类似我们现在热门的电车,大家去充电桩充电,如果这个充电桩没有人使用,那你就可以用了,这是快速通道。

  2. 中速通道:如果我们去充电时候,发现这个充电桩已经有人在使用,但是没有人在排队等待,那么你就是第一个等待的人,相当于拿到了VIP金牌,这个人充满了之后,就轮到你了。

  3. 慢速通道:如果有人在充电,而且已经有人在排队了。你一看,妈呀,剩余的路程数不多了,离下一个充电站还有好几百公里,那你只能老老实实排队,这就是里程焦虑,慢速通道。

QSpinLock有啥优点,笨叔觉得有下面几个:

1. 集成MCS算法到自旋锁中,继承了MCS算法的所有优点,有效解决了CPU高速缓存行颠簸问题。

2. 没有增加spinlock数据结构的大小,把val细分成多个域,完美实现了MCS算法

3. 当只有两个CPU试图获取自旋锁时,使用pending域就可以完美解决问题,第2个CPU只需要设置pending域,然后自旋等待锁释放。当有第3个或者更多CPU来争用时,则需要使用额外的MCS节点。第3个CPU会自旋等待锁被释放,即pending域和locked域被清零,而第4个CPU和后面的CPU只能在MCS节点中自旋等待locked域被置1,直到前继节点把locked控制器过继给自己才能有机会自旋等待自旋锁的释放,从而完美解决激烈锁争用带来的高速缓存行颠簸问题。

所以,从经典自旋锁到基于排队的自旋锁,再到现在的排队自旋锁,可以看到社区专家们对性能优化孜孜不倦的追求。也许,在不久将来,qspinlock的实现还会有比较大的变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值