Multithreading 用户级线程是否利用了多处理?
用户级线程是否利用了多处理?我在这里读到一个这样的答案。但是,现在还不清楚 另一个答案是,这是可能的Multithreading 用户级线程是否利用了多处理?,multithreading,process,operating-system,multiprocessing,Multithreading,Process,Operating System,Multiprocessing,用户级线程是否利用了多处理?我在这里读到一个这样的答案。但是,现在还不清楚 另一个答案是,这是可能的 我在这里遗漏了一些重要的细节吗?通常,用户级线程不能利用多处理,而内核级线程可以利用它 这仅仅意味着我们可以在多核计算机系统上并行运行多个内核级线程。但是,对于用户级线程,就不能做到这一点 这是可能的,因为内核级线程由操作系统管理,而用户级线程由用户管理,这意味着操作系统只知道单个用户级线程(执行线程),即使实际上有多个线程 现在,在您提供的链接中,您提到: Some implementat
我在这里遗漏了一些重要的细节吗?通常,
用户级线程不能利用多处理,而内核级线程可以利用它
这仅仅意味着我们可以在多核计算机系统上并行运行多个内核级线程。但是,对于用户级线程
,就不能做到这一点
这是可能的,因为内核级线程
由操作系统
管理,而用户级线程
由用户管理,这意味着操作系统只知道单个用户级线程
(执行线程),即使实际上有多个线程
现在,在您提供的链接中,您提到:
Some implementations base their user threads on top of several kernel
threads, to benefit from multi-processor machines (M:N model).
从阅读链接后我所了解的情况来看,用户级线程
有可能利用多处理
,前提是它的实现特定。因此,这基本上类似于与核心
关联的内核级线程
,以及与相应的内核级线程
关联的用户级线程
所以最后,它毕竟是在多个内核(或CPU)上并行运行的内核级线程。没有内核的任何帮助,我们无法利用多处理
,通常,用户级线程
无法利用多处理,而内核级线程
可以利用它
这仅仅意味着我们可以在多核计算机系统上并行运行多个内核级线程。但是,对于用户级线程
,就不能做到这一点
这是可能的,因为内核级线程
由操作系统
管理,而用户级线程
由用户管理,这意味着操作系统只知道单个用户级线程
(执行线程),即使实际上有多个线程
现在,在您提供的链接中,您提到:
Some implementations base their user threads on top of several kernel
threads, to benefit from multi-processor machines (M:N model).
从阅读链接后我所了解的情况来看,用户级线程
有可能利用多处理
,前提是它的实现特定。因此,这基本上类似于与核心
关联的内核级线程
,以及与相应的内核级线程
关联的用户级线程
所以最后,它毕竟是在多个内核(或CPU)上并行运行的内核级线程。如果没有内核的任何帮助,我们无法利用多处理
,这取决于您如何定义“利用”
用户线程由进程调度。
进程由内核调度
然后,用户线程只能在调度进程的进程上执行
因此,来自同一进程的用户线程不能同时在多个处理器上执行。它们执行交织
如果这是你对多重处理的定义,你的答案是否定的
但是,如果操作系统支持,该进程可以在任何可用的处理器上执行。因此,用户线程可以在任何可用的处理器上执行
如果这是您对多重处理的定义,您的答案是肯定的。这取决于您如何定义“利用”
用户线程由进程调度。
进程由内核调度
然后,用户线程只能在调度进程的进程上执行
因此,来自同一进程的用户线程不能同时在多个处理器上执行。它们执行交织
如果这是你对多重处理的定义,你的答案是否定的
但是,如果操作系统支持,该进程可以在任何可用的处理器上执行。因此,用户线程可以在任何可用的处理器上执行
如果这是您对多重处理的定义,那么您的答案是肯定的。Ok!所以,让它精确一点。实际上第二个链接说,如果你借用一些内核级线程,那么用户级线程可以像1:1模型一样工作。“就是这个吗?”琼西利克:是的。间接地说,他们谈论的是一对一模型。@JonSillick,但请记住,这只是特定于实现的。我从未见过在一个内核线程中执行多个用户线程的实际线程实现。显然,应用程序可以通过系统服务创建内核线程,并通过库调用在这些内核线程中创建用户线程。然而,这个模型是理论上的。好吧!所以,让它精确一点。实际上第二个链接说,如果你借用一些内核级线程,那么用户级线程可以像1:1模型一样工作。“就是这个吗?”琼西利克:是的。间接地说,他们谈论的是一对一模型。@JonSillick,但请记住,这只是特定于实现的。我从未见过在一个内核线程中执行多个用户线程的实际线程实现。显然,应用程序可以通过系统服务创建内核线程,并通过库调用在这些内核线程中创建用户线程。然而,这个模型是理论性的。