谁能告诉我。所有术语“内核线程”、“本机线程”和"Os线程“都代表内核线程吗?还是他们不一样?如果它们是不同的,那么它们之间有什么关系呢?
发布于 2012-09-16 07:19:11
这方面没有真正的标准。术语因上下文而异。然而,我将尝试解释我所知道的不同类型的线程(并且添加纤维只是为了完整,就像我看到的人们所说的线程一样)。
-线程在内核中
这些很可能是内核线程术语所指的内容。它们只存在于内核级别。它们允许(稍微有限地)并行执行内核代码本身。
-- 应用程序线程化
这就是线程这个术语的一般含义。它们是单独的并行执行线程,可以在不同的处理器上调度,它们共享相同的地址空间,并由操作系统作为单个进程处理。
POSIX标准定义了符合POSIX的系统中线程应该具有的属性(实际上,库以及每个库条目应该如何运行)。Windows线程模型与POSIX非常相似,而且,AFAIK通常可以像我所做的那样讨论线程:在同一进程中发生的并行执行,并且可以在不同的处理器上进行调度。
-古linux线程
在早期,linux内核不支持线程。但是,它确实支持创建两个共享相同地址空间的不同进程。有一个项目(LinuxThreads)试图使用它来实现某种线程处理能力。
当然,问题是内核仍然将它们作为单独的进程来处理。因此,结果不符合POSIX标准。例如,信号的处理是有问题的(因为信号是进程级的概念)。正是在这种非常具体的背景下,“本地人”一词才开始流行起来。它指的是“本机”,如“内核级”中对线程的支持。
在内核的帮助下,最终实现了对POSIX兼容线程的实际支持。今天,这是唯一一种真正值得称道的线程。事实上,旧的方式根本不是真正的线程处理。它是由多个进程共享地址空间,因此应该引用它。但是,曾经有一段时间,被称为线程(因为它是您对Linux所能做的唯一事情)。
-用户级别和绿色线程
这是另一个上下文,其中“本机”经常被用来与另一个线程模型形成对比。绿色线程和用户级线程是在同一个进程中发生的线程,但它们完全是在用户级别处理的。绿色线程在虚拟机中使用(尤其是那些实现pcode执行的线程,就像java虚拟机一样),它们也是由许多语言在库级别上实现的(例如: Haskell、Racket、Smalltalk)。
这些线程不需要依赖内核提供的任何线程处理工具(但通常依赖于异步I/O)。因此,它们通常不能在单独的处理器上调度。在这些上下文中,“本机线程”或"OS线程“可用于引用实际的内核调度线程,而不是绿色/用户级别的线程。
请注意,“不能在单独的处理器上调度”只有在单独使用时才是正确的。在同时具有用户级/绿色线程和本机/os线程的混合系统中,可以为每个处理器创建一个本机/os线程(以及在某些系统上设置关联掩码,使每个线程只在特定处理器上运行),然后有效地将用户级线程分配给这些线程。
-纤维与合作多任务
我见过一些人叫这些线。这是不恰当的,正确的名字是纤维。它们也是并行执行的模型,但与线程(和进程)相反,它们是协作的。这意味着,每当光纤运行时,其他光纤就不会运行,直到正在运行的光纤自动“屈服”执行,接受暂停,并最终在稍后恢复。
https://stackoverflow.com/questions/12444332
复制相似问题