用户级线程是否利用多处理?我在这里读到了一个这样的答案。但是,还不清楚。
这里的另一个答案说这是可能的
用户级线程 (ULT) 和内核级线程 (KLT) 在并发执行方面有何不同?
我是否遗漏了一些重要的细节?
通常,
user-level threads
无法利用多重处理,而kernel-level threads
可以利用它。
这只是意味着我们可以在
kernel-level threads
计算机系统上并行运行多个 multi-core
。但对于 user-level threads
却不能这样做。
这是可能的,因为
kernel-level threads
由 Operating System
管理,而 user-level threads
由用户管理,这意味着操作系统只知道单个 user-level thread
(正在执行的),即使实际上有不止一个。
现在在您的链接中,您提到了:
Some implementations base their user threads on top of several kernel
threads, to benefit from multi-processor machines (M:N model).
根据我阅读链接后的理解,
user-level threads
有可能利用multiprocessing
,只要其实现特定。所以这基本上就像一个 kernel-level thread
与 core
关联,以及 user-level thread
与相应的 kernel-level thread
关联。
所以最终,所有的
kernel-level threads
都在 several cores(OR CPU's)
上并行运行。如果没有 multiprocessing
的任何帮助,我们就无法利用 kernel
。
这取决于你如何定义“利用”。
用户线程由进程调度。 该进程由内核调度。
用户线程只能在调度该进程的进程上执行。
因此来自同一进程的用户线程不能同时在多个处理器上执行。他们交错执行。
如果这是您对多重处理的定义,那么您的答案是否定的。
但是,如果操作系统支持,则该进程可以在任何可用的处理器上执行。因此,用户线程可以在任何可用的处理器上执行。
如果这是您对多重处理的定义,那么您的答案是肯定的。
在 m:1 模型中,用户线程映射到一个内核线程。因此用户线程不能同时在多个内核上运行。但在 m:n 模型中,当内核线程可以在多个内核上运行时,用户线程映射到许多内核线程,因此用户线程可以在多个内核上运行并利用多处理。