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

Con*_*ine 2 linux multithreading linux-kernel

我对所有这些实体以及它们在 Linux 中如何互连感到有点困惑。《Unix 内部原理》一书指出,这lightweight process (LWP)是内核支持的用户线程,并且内核看不到进程内的线程。对于 Linux 来说仍然如此吗?

据我了解,用户空间线程通过更高级别的抽象作为库在进程内调度pthread,无需内核的干预。我对吗?

Arn*_*out 5

在 Linux 上的 pthread 中,线程调度由内核处理。

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

也可以根本不使用本机线程,而是使用线程的完全用户空间实现,使用setjmp()longjmp()。例如,这可以用于实现某些解释语言。但是,我不知道实际实现其自己的用户空间调度程序的程序或库的具体示例。

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