一个线程一旦启动,总是在同一个CPU上运行直到它终止?或者是OS / Implementation依赖吗?
我出于好奇而问这个。
答案 0 :(得分:2)
这取决于操作系统, 但是一般情况下,OS尝试使线程在相同的内核上运行,因为线程使用的数据仍有更高的机会在该内核中缓存,从而提高了性能。
这一切都基于线程调度机制。
答案 1 :(得分:2)
一般来说,在多核盒子上,没有。如果可以使用相同的核心,那么通过利用其他人发布的L1缓存中的数据可能会获得优势,但是明显强制核心亲和力的缺点是不好的:
创建线程X并绑定到核心0。 线程X运行。 线程X阻塞系统调用,可能是I / O或线程间通信。 OS在核心0上运行线程Y. 线程X准备就绪,而核心1,2和3处于空闲状态。
现在是什么?
不必要的抢先线程Y?移动Y的开销,加上如果Y也绑定到核0的话? 再次阻止X直到Y阻塞?防止X在可能的情况下取得进展。