首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核线程本机线程/线程

内核线程本机线程/线程
EN

Stack Overflow用户
提问于 2012-09-16 03:55:32
回答 1查看 727关注 0票数 1

谁能告诉我。所有术语“内核线程”、“本机线程”和"Os线程“都代表内核线程吗?还是他们不一样?如果它们是不同的,那么它们之间有什么关系呢?

EN

回答 1

Stack Overflow用户

发布于 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线程(以及在某些系统上设置关联掩码,使每个线程只在特定处理器上运行),然后有效地将用户级线程分配给这些线程。

-纤维与合作多任务

我见过一些人叫这些线。这是不恰当的,正确的名字是纤维。它们也是并行执行的模型,但与线程(和进程)相反,它们是协作的。这意味着,每当光纤运行时,其他光纤就不会运行,直到正在运行的光纤自动“屈服”执行,接受暂停,并最终在稍后恢复。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12444332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档