Sud*_*ta 1 multithreading operating-system
任何人都可以告诉我.所有术语"内核线程","本机线程"和"Os线程"都代表内核线程吗?或者他们是不同的?如果它们不同,那么它们之间的关系是什么?
没有真正的标准.术语因环境而异.但是我会尝试解释我所知道的不同类型的线程(并且为了完整性添加光纤,因为我看到人们称它们为线程).
- 在内核中进行线程化这些很可能是您的内核线程术语所指的内容.它们仅存在于内核级别.它们允许(有限的)并行执行内核代码本身.
- 应用程序线程这些是线程一般意味着什么.它们是并行执行的独立线程,可以在不同的处理器上进行调度,这些处理器共享相同的地址空间并由操作系统作为单个进程处理.
POSIX标准定义了线程在POSIX兼容系统中应具有的属性(实际上是库以及每个库条目应该如何表现).Windows线程模型与POSIX模型极为相似,而且,AFAIK,我可以安全地谈论线程的方式:在同一进程中发生的并行执行,可以在不同的处理器上进行调度.
- 古代linux线程在早期,Linux内核不支持线程.但它确实支持创建共享相同地址空间的两个不同进程.有一个项目(LinuxThreads)试图用它来实现某种线程能力.
当然,问题是内核仍将它们视为单独的进程.因此,结果不符合POSIX.例如,信号处理是有问题的(因为信号是过程级概念).正是在这个非常具体的背景下,"本土"一词开始变得普遍.它指的是"本机",如"内核级别"支持线程.
在内核的帮助下,最终实现了对POSIX兼容线程的实际支持.今天,这是唯一真正值得这个名字的线程.事实上,旧的方式根本不是真正的线程.它是多个进程共享地址空间,因此应该参考.但有一段时间,这被称为线程(因为它是你可以用Linux做的唯一的事情).
- 用户级别和绿色线程这是另一种情况,其中"原生"通常用于与另一种线程模型形成对比.绿色线程和用户级线程是在同一进程中发生的线程,但它们完全在userlevel处理.绿色线程用于虚拟机(特别是那些实现pcode执行的线程,就像java虚拟机的情况一样),它们也在库级别通过多种语言实现(例如:Haskell,Racket,Smalltalk).
这些线程不需要依赖内核的任何线程设施(但通常依赖于异步I/O).因此,它们通常不能在单独的处理器上安排.在这些上下文中,与绿色/用户级线程相比,"本机线程"或"OS线程"可用于指代实际的内核调度线程.
请注意,"无法在单独的处理器上进行调度"仅在单独使用时才会生效.在具有用户级/绿色线程和本机/操作系统线程的混合系统中,可以为每个处理器创建一个本机/操作系统线程(并且在某些系统上设置关联掩码,以便每个都只运行一个特定处理器)然后有效地将userlevel线程分配给这些线程.
- 纤维和合作多任务处理我看到有些人称这些线程.这是不合适的,正确的名称是纤维.它们也是并行执行的模型,但与线程(和进程)相反,它们是协作的.这意味着无论何时光纤运行,其他光纤都不会运行,直到正在运行的光纤自动"产生"执行,接受暂停并最终在以后恢复.