您的位置:首页 > 其它

自旋锁纠偏

2014-04-01 19:25 169 查看
自旋锁多出现在多处理器(核,线程)上的原因是在单处理器中自旋是没有意义的。

因为在只有一个核或指令流的处理器中,除非被调度否则不可能“等”到任何东西。因为“全部”处理资源都已经被占用。

这是自旋锁多见于多处理器(核,超线程)上的根本原因。

即在单(逻辑)处理器上面最好的去等待something发生的方法那就是把自己退出执行(阻塞掉),所以才能把机会让给其它的逻辑处理器执行。自旋是没有意义的。

但是这个条件在多处理器上已经被resolve掉了,因为多逻辑处理器就像多个活动的Actor,互相“等待”是合理的。即便是长时间的等待在有些时候也是合理的,不能断然就说不行或不好。

“历史”上,对于“单物理多逻辑处理器”起至奔腾4的超线程技术。在这样的处理器上稍稍自旋一下可以避免处理器进行状态切换,这是个绝对的正收益。状态切换在现代处理器上的开销是非常高的。事实上,一个没有同步的单线程任务效率有时是非常高的。

而且另一点就是,多处理器本来就帮助避免了很多的线程切换,如果还坚持在这样的环境中动不动就切换进程上下文,有点不合时宜。守旧。所以在多处理器时代多用自旋锁的确是一个好的practice!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: