自旋锁纠偏
2014-04-01 19:25
169 查看
自旋锁多出现在多处理器(核,线程)上的原因是在单处理器中自旋是没有意义的。
因为在只有一个核或指令流的处理器中,除非被调度否则不可能“等”到任何东西。因为“全部”处理资源都已经被占用。
这是自旋锁多见于多处理器(核,超线程)上的根本原因。
即在单(逻辑)处理器上面最好的去等待something发生的方法那就是把自己退出执行(阻塞掉),所以才能把机会让给其它的逻辑处理器执行。自旋是没有意义的。
但是这个条件在多处理器上已经被resolve掉了,因为多逻辑处理器就像多个活动的Actor,互相“等待”是合理的。即便是长时间的等待在有些时候也是合理的,不能断然就说不行或不好。
“历史”上,对于“单物理多逻辑处理器”起至奔腾4的超线程技术。在这样的处理器上稍稍自旋一下可以避免处理器进行状态切换,这是个绝对的正收益。状态切换在现代处理器上的开销是非常高的。事实上,一个没有同步的单线程任务效率有时是非常高的。
而且另一点就是,多处理器本来就帮助避免了很多的线程切换,如果还坚持在这样的环境中动不动就切换进程上下文,有点不合时宜。守旧。所以在多处理器时代多用自旋锁的确是一个好的practice!
因为在只有一个核或指令流的处理器中,除非被调度否则不可能“等”到任何东西。因为“全部”处理资源都已经被占用。
这是自旋锁多见于多处理器(核,超线程)上的根本原因。
即在单(逻辑)处理器上面最好的去等待something发生的方法那就是把自己退出执行(阻塞掉),所以才能把机会让给其它的逻辑处理器执行。自旋是没有意义的。
但是这个条件在多处理器上已经被resolve掉了,因为多逻辑处理器就像多个活动的Actor,互相“等待”是合理的。即便是长时间的等待在有些时候也是合理的,不能断然就说不行或不好。
“历史”上,对于“单物理多逻辑处理器”起至奔腾4的超线程技术。在这样的处理器上稍稍自旋一下可以避免处理器进行状态切换,这是个绝对的正收益。状态切换在现代处理器上的开销是非常高的。事实上,一个没有同步的单线程任务效率有时是非常高的。
而且另一点就是,多处理器本来就帮助避免了很多的线程切换,如果还坚持在这样的环境中动不动就切换进程上下文,有点不合时宜。守旧。所以在多处理器时代多用自旋锁的确是一个好的practice!
相关文章推荐
- 调用webservice,出现错误:Uncaught SoapFault exception: [HTTP] Error Fetching http headers
- 时间: 2014年4月1日16:17:28 栏目删除功能完善
- 简单的博客项目
- 5、基本开发环境搭建
- 从邮件用自己的应用程序打开关联文件的思路总结
- 协议
- OD/CE 过掉TMD壳附加检查
- STL容器的区别和适用情况
- ICMP 报文自定制
- POJ 1002 487-3279
- iOS-ASIHTTPRequest框架学习
- #237 div2 C. Restore Graph
- 条款16: 如何将vector和string的数据传给遗留的API
- 第三章作业
- 初识Java
- 2012-03-12 23:38 【转】Java image的文件获取、显示、像素分解、合成
- 顺序建表
- 3
- hdu 1097
- /usr/bin/ld: cannot find -lz"错误解决