绿色线程'之间的区别是什么?和'用户线程'

时间:2017-12-07 17:37:28

标签: multithreading process operating-system

目前,我正在处理操作系统概念。但是,我在理解"内核线程"之间的区别时遇到了问题。和"用户线程"。

所以我上网浏览了这篇文章: https://stackoverflow.com/a/15984127/5005715

不幸的是,我不明白"绿色线程"之间的区别是什么?和"用户线程"。对我来说它基本相同。

我是对的吗?

2 个答案:

答案 0 :(得分:0)

Linux “用户线程”是一个

的线程
  • 由操作系统管理,
  • 是在用户模式代码(例如,应用程序)调用clone系统调用
  • 时创建的
  • 代表应用程序执行用户模式代码和内核代码。

Linux “内核线程”几乎是一回事,但是

  • 它由内核为自己的目的创建,
  • 它只执行内核模式代码,

我不知道“用户线程”和“内核线程”在任何其他操作系统中是否具有相似的含义。

任何操作系统中的“绿色线程”是完全由用户模式进程管理的线程。操作系统不知道绿色线程,并且同一进程中的多个绿色线程无法同时在不同的CPU上运行。

答案 1 :(得分:0)

你被术语束缚了。让我试着让你把新术语混淆不清。

有THREADS(又名内核线程),还有SIMULATED THREAD(也就是用户线程以及我在绿色线程之前从未听过的内容。

CPU只知道进程。传统的流程​​由单个执行流(您可以称之为THREAD)和地址空间组成。操作系统可以通过创建共享相同地址空间的多个指令流(THREADS)来欺骗CPU。

在现代操作系统中,进程由地址空间和一个或多个执行流(THREADS)组成。因为这些是由操作系统内核管理的,所以它们被称为“内核线程:

在支持THREADS的系统上,进程由地址空间和一个或多个执行指令流(即THREADS)组成。

在这些日子里,操作系统每个进程只允许一个线程。它甚至没有被称为“线程”。我们刚刚有过程。然后出现了需要多线程的语言,比如Ada。由于操作系统不支持线程,因此线程在语言支持库中实现。这些库使用定时器在不同的执行流之间切换。这些库模拟了线程。操作系统书籍将此方法称为“用户线程”。

最大的问题是为什么这是操作系统书籍中的一个主要话题。操作系统支持线程,或者不支持。

“用户线程”是应用程序级编程,因此除了在线程不可用时它们存在时,不需要操作系统书籍来覆盖它们。

你正在遭受一个过于复杂的简单话题。