一个单一的进程可以在不同的核上运行不同的线程吗?
(我认为可以)
如果是这样,不同的核将共享相同的地址空间但具有不同的缓存?这是否意味着缓存会冗余?
谢谢!
一个单一的进程可以在不同的核上运行不同的线程吗?
(我认为可以)
如果是这样,不同的核将共享相同的地址空间但具有不同的缓存?这是否意味着缓存会冗余?
谢谢!
是的,单个进程可以在不同的核心上运行多个线程。
缓存是特定于硬件的。许多现代英特尔处理器具有三层缓存,其中最后一级缓存在核心之间共享。
这并不意味着非共享缓存是冗余的,但它确实对多核性能产生影响。特别是,如果一个核心更新了地址空间中当前存在于另一个核心私有缓存中的值,则必须运行缓存一致性协议,以确保另一个核心不能读取过时的值。
如果底层系统调度线程(而不是进程)执行(即内核线程),则单个进程可以在多个处理器上同时运行线程。这是当今大多数系统实现线程的方式(例如,Windows、Linux)。
然而,仍有一些系统将进程调度为执行。在这种系统上,线程由库(即用户线程)进行调度。换句话说,进程调度自己的线程以执行任务,在这些系统上,线程在同一处理器上执行。