我对所有这些enteties以及它们如何在Linux中互连感到困惑。 " Unix内部"本书指出lightweight process (LWP)
是内核支持的用户线程,并且该内核没有看到进程内的线程。它对Linux来说是真的吗?
据我所知,用户空间线程在进程内调度,通过更高级别的抽象作为pthread
库,没有内核的干预。我是对的吗?
答案 0 :(得分:3)
在Linux上的pthreads中,线程调度由内核处理。
在Linux中,使用clone()
系统调用创建线程或进程(fork()
是克隆的特例)。根据传递给克隆的选项,新创建的过程将是更轻的权重或更重的权重(即具有单独的存储空间和单独的文件描述符集等)。 pthread_create()
使用clone()
与最小分离量。
也可以根本不使用本机线程,而是使用setjmp()
和longjmp()
使用线程的完全用户空间实现。例如,这可以用于实现一些解释语言。但是,我不知道实际上实现自己的用户空间调度程序的程序或库的具体示例。
还有一件事:" 内核线程"通常用于指定在内核空间中运行的线程,即它是内核本身的一部分。在ps
这样的线程是可识别的,因为它们被方括号包围,如[kthreadd]
。
答案 1 :(得分:0)
实际上,对于在用户空间中实现的线程,内核不知道线程。 因此,如果一个线程阻塞,则其他线程也属于同一个进程块,因为操作系统不知道线程。
答案 2 :(得分:0)
LWP(轻量级进程)在单个内核线程顶部的用户空间中运行并共享 它的地址空间和系统资源与同一内部的其他LWP 过程。
从:https://en.wikipedia.org/wiki/Light-weight_process
在linux中,lwp位于内核线程之上,并共享资源。一些语言,例如golang(协程) 自己安排用户线程。