的Linux用户空间线程,内核线程,轻量级进程

的Linux用户空间线程,内核线程,轻量级进程

问题描述:

我与这一切enteties有点糊涂了,他们在Linux下如何互连。 “Unix内部”书指出lightweight process (LWP)是内核支持的用户线程,并且该内核在进程内部看不到线程。 Linux对于Linux来说是否正确?的Linux用户空间线程,内核线程,轻量级进程

据我了解,预定用户空间线程内部处理,通过更高层次的抽象,pthread库,而内核的干预。我对吗?

在Linux上的并行线程,线程调度是由内核来处理。

在Linux中,使用clone()系统调用创建线程或进程(fork()是克隆的特例)。根据传递给克隆的选项,新创建的进程将具有更轻或更重的权重(即具有单独的内存空间和单独的一组文件描述符等)。 pthread_create()使用clone()以最小的分离量。

也可能根本不使用本地线程,而是使用setjmp()longjmp()的完全用户空间实现的线程。例如,这可以用来实现一些解释性语言。然而,我并不知道程序或库实际上实现了自己的用户空间调度程序的具体示例。

还有一件事:“内核线程”通常用于指定在内核空间中运行的线程,即它是内核本身的一部分。在ps这样的线程是可识别的,因为它们被方括号包围,如[kthreadd]

+1

LinuxThreads实现仍然采用1:1到用户线程内核调度线程映射(只有它映射到进程和NPTL - 的glibc的POSIX线程映射到内核调度线程)。到2003年只有NGPT(下一代POSIX线程)可能不是1:1映射;和https://en.wikipedia.org/wiki/Green_threads有时在语言翻译中实施。 – osgx

+0

@osgx好的,谢谢你的解释。我删除了对LinuxThreads的引用以避免混淆。 – Arnout

事实上,在用户空间中实现线程,内核不知道线程。 因此,如果一个线程阻塞,则其他线程也属于同一个进程块,因为OS不知道线程。

+1

如果不正确大多在这个答案中给出的信息。第一段是正确的,因为它提到了在用户空间中实现的线程。但是,你总体上继续谈论LightWeightProcesses,这些通常是正常的过程,而不是用户空间中实现的线程。另外,内核线程是一个完全在内核空间运行并且没有用户空间的线程。 – Arnout