11 concurrency operating-system multicore
单个进程可以在不同的核心上运行不同的线程吗?
(我认为他们可以)
在这种情况下,不同的内核共享相同的地址空间但具有不同的缓存?这是否意味着缓存会多余?
谢谢!
是的,单个进程可以在不同的核心上运行多个线程.
缓存特定于硬件.许多现代英特尔处理器都有三层缓存,其中最后一级缓存在内核之间共享.
这并不意味着非共享缓存是冗余的,但它确实对多核性能有影响.特别是,如果一个核心更新当前位于另一个核心的专用高速缓存中的地址空间中的值,则必须运行高速缓存一致性协议以确保另一个核心不再能够读取过时值.
如果底层系统调度线程(而非进程)执行(即内核线程),则单个进程可以在多个处理器上同时运行线程。这是当今大多数系统(例如Windows,Linux)上实现线程的方式。
但是,仍然有一些系统计划执行流程。在此类系统上,线程是由库(又称为用户线程)调度的。换句话说,该进程调度其自己的线程以供执行。在那些系统上,进程的线程在同一处理器上执行。