阅读WebKit最近搞的一个存储开销小的、快速自适应的Locking机制

https://webkit.org/blog/6161/locking-in-webkit/


主要受Linux内核futex设计的启发:

https://www.kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux

这个作者里面的Rusty Russell就是Netfilter和KVM的作者。他2002年就提出了futex?


有了细粒度的自适应锁,JS就可以实现高性能的并行计算了!

WTF::Lock和WTF::Condition依赖于ParkingLot(这里API用汽车的入库出库做比喻,汽车就是Thread。)每个Lock需要1个byte的存储,实际用到2个bit的状态信息。此byte的内存地址进一步作为Hash Key索引到全局ParkingLot的队列。而队列里面的等待个数最大为全部Thread的数目(不是很多)


注意这里有个关键特性:一般atomics操作(CAS)只会设置一个比特位,而ParkingLot的Barging Lock需要用CAS来维护2个比特位(!),这相当于4个状态的状态机,而这4个状态之间的状态迁移是原子式更新的。——其实这样就好理解了,一般操作系统里面的同步原语一般只用2个状态(相当于1个比特位),多个状态下的状态机如何设计实际上属于工程内容,关键是 用CAS来维护多个状态的原子更新

其他的都是trival细节,并不重要。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值