线程:内核线程还是内核支持线程还是用户级线程?


9

有谁知道两者之间的区别是什么?

在我看来,内核线程对应于(直观地)运行内核的代码,但是我不确定其他两个...

另外,由于您在内核执行所有线程调度/切换的同时访问库,因此pthreads标准是否被认为是用户级别的和内核支持的?

Answers:


14

术语“内核线程”可以用来指代完全在内核空间中运行的实际线程,也可以指代由内核调度的用户空间线程。术语“内核支持”线程是指后者,它们在用户空间中运行,但由内核提供便利,这通常意味着内核会对其进行调度。

“用户级线程”通常是指用户空间可见的线程。也就是说,您在调用线程标准的“创建线程”函数时所创建的内容。通常,术语“用户级线程”用于表示由应用程序代码创建的线程,而与系统如何实现无关。它可能是纯用户空间线程,几乎没有内核支持,也可能是内核调度的线程。

pthreads标准可以实现为纯用户空间线程(内核在其中调度进程,而进程调度在线程),内核支持的线程(内核在其中直接调度线程)或混合方法(内核在其中调度)内核级线程,然后在用户空间中调度用户级线程)。该标准不需要任何一种特定的实现方式。最常见的实现是一对一映射,其中每个用户级线程都有一个由内核调度的相应线程。


在Linux上的实现是什么样的?
yati sagade 2011年

3
在我所知道的所有现代(2.6内核或更高版本)Linux系统上,系统的默认线程实现是1对1,每个用户级线程都有一个对应的KSE(内核调度实体-基本上是由Linux内核)。您使用'pthread_create'创建的线程将直接由内核调度。现代系统通常使用NPTL,而旧系统则使用LinuxThreads-它们都是一对一的
David Schwartz

“或者是一种混合方法(其中内核调度一个内核级线程,然后在用户空间中调度一个用户级线程)。” 嗨,大卫,您能再​​解释一下吗?我不确定发生了什么...当您说一对一映射时,您在提到内核级主题时是指线程控制块吗?
黑暗圣堂武士

通过1对1我的意思是说,每当你所说的“在pthread_create”的时候,一个新的上下文中创建一个由内核调度。在混合方法中,内核调度的上下文数量少于创建的线程数量-内核调度这些上下文之一,然后线程库调度应用程序创建的线程之一。
大卫·史瓦兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.