gpt4 book ai didi

multithreading - 一对一的多线程模型

转载 作者:行者123 更新时间:2023-12-03 12:44:55 24 4
gpt4 key购买 nike

在 silberschatz“操作系统概念”一书中,第 4.3.2 节说

one-to-one model provides more concurrency than the many-to-one model by allowing another thread to run when a thread makes a blocking system call. It also allows multiple threads to run in parallel on multiprocessors.



我在这里有两个问题:
  • 一个线程如何被阻塞而另一个线程被映射到内核线程上?
    难道我们不知道如果一个线程被阻塞,整个过程
    用户级线程被阻塞?
  • 操作系统考虑用户级线程
    仅作为一个线程。不能分配给多个
    处理器/内核。下面给出的行是否与此相矛盾
    主意?

    It also allows multiple threads to run in parallel on multiprocessors

  • 最佳答案

    你对用户级线程和内核级线程的理解是不正确的,特别是你需要理解用户级线程是如何映射到内核级线程的。所以首先让我们定义一些术语
    内核线程
    由内核创建和管理的线程( 可调度任务 )。每个内核级线程都由一些包含与线程相关的信息的数据结构表示。在 Linux 的情况下,它是 task_struct .内核线程是唯一被 CPU 调度器考虑进行调度的线程。
    注意:内核线程有点用词不当,因为 Linux 内核不区分线程和进程,可调度任务会更好地描述这个实体。
    用户线程
    由内核级别以上的某些库(例如JVM)创建和管理的线程。创建这些线程的库负责它们的管理,即哪个线程在何时运行。
    用户级到内核级映射
    现在您可以根据需要创建任意数量的用户级线程,但要执行它们,您需要创建一些内核级线程( task_struct )。可以通过多种方式创建内核级线程
    一对一模型
    在这种情况下,无论何时创建用户级线程,您的库都会要求内核创建一个新的内核级线程。在 Linux 的情况下,您的库将使用 clone 系统调用来创建内核级线程。
    多对一模式
    在这种情况下,您的库仅创建一个内核级线程 ( task_struct )。无论您创建多少个用户级线程,它们都共享相同的内核级线程,就像在单核 CPU 上运行的进程一样。要理解的一点是,您的库在这里的作用很像 CPU 调度程序,它在单个内核级线程上调度许多用户级线程。
    现在回答您的问题

    The OS considers user-level threads as one thread only. It can’t beassigned to multiple processors/cores. Isn't the below given linecontradicting that idea?


    如果您使用多对一模型,在这种情况下,您的所有用户级线程将只有一个内核级线程,因此它们不能在不同的 CPU 上运行。
    但是如果您使用一对一模型,那么您的每个用户级线程都有一个相应的内核级线程,可以单独调度,因此如果您有多个 CPU,用户级线程可以在不同的 CPU 上运行。

    关于multithreading - 一对一的多线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124129/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com