一个进程可以在多个核心上运行吗?

28

一个单一的进程可以在不同的核上运行不同的线程吗?

(我认为可以)

如果是这样,不同的核将共享相同的地址空间但具有不同的缓存?这是否意味着缓存会冗余?

谢谢!


1
一个单一的进程可以包含多个线程,是的。 - Phoenix
它们可以被安排在任何内核上运行吗?当进程被加载到CPU上时,我理解寄存器的内容会被切换;那么在多个CPU上如何工作呢? - user3597931
3
请查看 http://programmers.stackexchange.com/questions/181157/how-to-program-thread-allocation-on-multicore-processors - Rupsingh
2个回答

25

是的,单个进程可以在不同的核心上运行多个线程。

缓存是特定于硬件的。许多现代英特尔处理器具有三层缓存,其中最后一级缓存在核心之间共享。

这并不意味着非共享缓存是冗余的,但它确实对多核性能产生影响。特别是,如果一个核心更新了地址空间中当前存在于另一个核心私有缓存中的值,则必须运行缓存一致性协议,以确保另一个核心不能读取过时的值。


14

如果底层系统调度线程(而不是进程)执行(即内核线程),则单个进程可以在多个处理器上同时运行线程。这是当今大多数系统实现线程的方式(例如,Windows、Linux)。

然而,仍有一些系统将进程调度为执行。在这种系统上,线程由库(即用户线程)进行调度。换句话说,进程调度自己的线程以执行任务,在这些系统上,线程在同一处理器上执行。


你如何判断你的系统使用了内核线程、用户线程还是两者都有? - Themelis
1
你必须检查系统文档。几乎所有的系统都支持模拟“用户”线程,因为它们是库而不是内核的一部分。 - user3344003

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接