内核线程本机线程os线程

时间:2012-09-16 03:55:33

标签: multithreading operating-system

任何人都可以告诉我。所有术语“内核线程”,“本机线程”和“Os线程”都代表内核线程吗?或者他们是不同的?如果它们不同,那么它们之间的关系是什么?

1 个答案:

答案 0 :(得分:5)

没有真正的标准。术语因环境而异。但是我会尝试解释我所知道的不同类型的线程(并且为了完整性添加光纤,因为我看到人们称它们为线程)。

- 内核中的线程

这些很可能是内核线程术语所指的内容。它们仅存在于内核级别。它们允许(有限的)并行执行内核代码本身。

- 应用程序线程

这些是 thread 这个术语的含义。它们是并行执行的独立线程,可以在不同的处理器上进行调度,这些处理器共享相同的地址空间,并由操作系统作为单个进程处理。

POSIX标准定义了线程在POSIX兼容系统中应具有的属性(实际上是库以及每个库条目应该如何表现)。 Windows线程模型与POSIX模型非常相似,而且,AFAIK,我可以安全地谈论线程的方式:在同一个进程中发生的并行执行,可以在不同的处理器上进行调度。

- 古老的linux线程

在早期,Linux内核不支持线程。但它确实支持创建共享相同地址空间的两个不同进程。有一个项目(LinuxThreads)试图用它来实现某种线程能力。

问题当然是内核仍将它们视为单独的进程。因此,结果不符合POSIX。例如,信号处理是有问题的(因为信号是过程级概念)。正是在这个非常具体的背景下,“本土”一词开始变得普遍。它指的是“本机”,如“内核级别”支持线程。

在内核的帮助下,最终实现了对POSIX兼容线程的实际支持。今天,这是唯一真正值得这个名字的线程。事实上,旧的方式根本不是真正的线程。它是多个进程共享地址空间,因此应该参考。但有一段时间, 被称为线程(因为这是你可以用Linux做的唯一的事情)。

- 用户级别和绿色线程

这是另一个上下文,其中“native”通常用于与另一个线程模型进行对比。绿色线程和用户级线程是在同一进程中发生的线程,但它们完全在userlevel处理。绿色线程用于虚拟机(特别是那些实现pcode执行的线程,就像java虚拟机的情况一样),它们也在库级别通过多种语言实现(例如:Haskell,Racket,Smalltalk)。

这些线程不需要依赖内核的任何线程设施(但通常依赖于异步I / O)。因此,它们通常不能在单独的处理器上安排。在这些上下文中,与绿色/用户级线程相比,“本机线程”或“OS线程”可用于指代实际的内核调度线程。

请注意,“无法在单独的处理器上安排”仅在单独使用时才会生效。在具有用户级/绿色线程和本机/ os线程的混合系统中,可以为每个处理器创建一个本机/ os线程(并且在某些系统上设置关联掩码,以便每个都只运行在特定处理器)然后有效地将用户级线程分配给这些。

- 光纤和合作多任务

我见过有些人称这些话题。这是不合适的,正确的名称是纤维。它们也是并行执行的模型,但与线程(和进程)相反,它们是协作的。这意味着无论何时光纤运行,其他光纤都不会运行,直到运行的光纤自动“产生”执行,接受暂停并最终在以后恢复。