【问题标题】:What data are shared between the green thread and the kernel level thread it is bound to?绿色线程和它绑定的内核级线程之间共享哪些数据?
【发布时间】:2019-04-18 11:54:36
【问题描述】:

我了解用户级线程或绿色线程由某些用户级线程库管理,并且必须“链接”到某些操作系统线程才能执行其任务。我知道线程只是一系列独立代码的抽象。线程用存储在内存中的一些数据结构来表示。在用户级或绿色线程的情况下,用户空间中存在并由用户级线程库管理。在操作系统级别或内核级别线程的情况下,它们由内核或操作系统存储和管理。我不明白将绿色线程链接到操作系统线程实际上是什么意思?我知道 1:1、n:1、n:m 方案,这不是我的问题所在。我的问题是在绿色线程和它绑定的内核线程之间复制或共享(或其他)哪些数据结构?当绿色线程必须进行上下文切换时,用户级线程库对这些结构做了什么?

【问题讨论】:

标签: multithreading operating-system green-threads


【解决方案1】:

有线程,也有模拟线程。您所说的“绿色线程”是模拟线程。

内核对模拟线程的存在一无所知。

我的问题是在绿色线程和它所绑定的内核线程之间复制或共享(或其他)哪些数据结构?

那么答案是否定的;至少在操作系统级别。该进程必须跟踪用户空间中的线程。

我知道 1:1、n:1、n:m 方案,这不是我的问题所在。

1:1、n:1 和 n:M 计划是完整的,旨在迷惑学生的学术 BullS*&T。线程中没有 n:M 这样的东西。这是不切实际的理论废话。 1:1 只意味着真正的线程。 n:1 表示模拟线程。

现实生活中只有两种模型:

在经典模型中,进程由执行流和地址空间组成。

在当前模型中,一个进程由多个执行流和一个地址空间组成。

在经典模型中没有线程。如果你想要线程,你必须使用带有计时器的库来模拟它们;不适合操作系统课程的主题,历史背景除外。

在当前模型中,多个执行流称为线程。在当前模型中没有任何理由使用模拟/绿色/用户线程。说模拟/绿色/用户线程有任何优势的教科书只适合用于猫箱衬垫。

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 2011-12-16
    • 2017-08-26
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多