线程总是在同一个核心上运行吗?

时间:2013-02-20 12:28:42

标签: multithreading

一个线程一旦启动,总是在同一个CPU上运行直到它终止?或者是OS / Implementation依赖吗?

我出于好奇而问这个。

2 个答案:

答案 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在可能的情况下取得进展。