自旋锁多出如今多处理器(核,线程)上的缘由是在单处理器中自旋是没有意义的。 spa
由于在只有一个核或指令流的处理器中,除非被调度不然不可能“等”到任何东西。由于“所有”处理资源都已经被占用。 线程
这是自旋锁多见于多处理器(核,超线程)上的根本缘由。 进程
即在单(逻辑)处理器上面最好的去等待something发生的方法那就是把本身退出执行(阻塞掉),因此才能把机会让给其它的逻辑处理器执行。自旋是没有意义的。 资源
可是这个条件在多处理器上已经被resolve掉了,由于多逻辑处理器就像多个活动的Actor,互相“等待”是合理的。即使是长时间的等待在有些时候也是合理的,不能断然就说不行或很差。 同步
“历史”上,对于“单物理多逻辑处理器”起至奔腾4的超线程技术。在这样的处理器上稍稍自旋一下能够避免处理器进行状态切换,这是个绝对的正收益。状态切换在现代处理器上的开销是很是高的。事实上,一个没有同步的单线程任务效率有时是很是高的。 效率
并且另外一点就是,多处理器原本就帮助避免了不少的线程切换,若是还坚持在这样的环境中动不动就切换进程上下文,有点不合时宜。守旧。因此在多处理器时代多用自旋锁的确是一个好的practice! 方法