【问题标题】:Does user level threads take advantage of multiprocessing?用户级线程是否利用多处理?
【发布时间】:2026-02-02 01:10:01
【问题描述】:

用户级线程是否利用了多处理?我在这里读到了一个这样的答案。但是,目前还不清楚。

What does it mean by "user threads cannot take advantage of multithreading or multiprocessing"?

这里的另一个答案说这是可能的

How do user level threads (ULTs) and kernel level threads (KLTs) differ with regards to concurrent execution?

我在这里遗漏了一些重要的细节吗?

【问题讨论】:

    标签: multithreading process operating-system multiprocessing


    【解决方案1】:

    通常,user-level threads 无法利用多处理,而 kernel-level threads 可以利用它。

    这只是意味着我们可以在multi-core 计算机系统上并行运行多个kernel-level threads。但是user-level threads就不行了。

    这是可能的,因为kernel-level threadsOperating 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 相关联。

    所以最后,它毕竟是在 several cores(OR CPU's) 上并行运行的 kernel-level threads。没有kernel 的帮助,我们无法利用multiprocessing

    【讨论】:

    • 好的!所以,让它有点精确。实际上,第二个链接说的是,如果您借用一些内核级线程,则可以使用户级线程像 1:1 模型一样工作。是这个吗?
    • @JonSillick 是的。间接地,他们在谈论一对一的模型。
    • @JonSillick 但请记住,这只是特定于实现的。
    • 我从未见过真实世界的线程实现,其中多个用户线程在单个内核线程中执行。显然,应用程序可以通过系统服务创建内核线程,并通过库调用在这些内核线程中创建用户线程。然而,这个模型是理论上的。
    【解决方案2】:

    这取决于您如何定义“利用”。

    用户线程由进程调度。 该进程由内核调度。

    然后,用户线程只能在调度进程的进程上执行。

    因此,来自同一进程的用户线程不能同时在多个处理器上执行。它们交错执行。

    如果这是您对多处理的定义,那么您的答案是否定的。

    但是,如果操作系统支持它,则该进程可以在任何可用的处理器上执行。因此,用户线程可以在任何可用的处理器上执行。

    如果这是您对多处理的定义,那么您的答案是肯定的。

    【讨论】: