use*_*402 8 linux multithreading lightweight-processes
这句话是否正确:"Linux中的所有线程都是LWP,但并非所有LWP都是线程".实际上,我尝试了解Linux中的线程实现.pthread_create调用clone syscall但是在man clone中我没有找到任何对LWP的引用.那么,Linux有LWP吗?
anq*_*egi 10
在这篇博客中,您可以找到答案http://www.thegeekstuff.com/2013/11/linux-process-and-threads/
Linux中的线程只不过是一个执行流程的流程.包含多个执行流程的流程称为多线程流程.
对于非多线程进程,只有执行流程是主要的执行流程,因此它也称为单线程进程.对于Linux内核,没有线程的概念.内核将每个线程视为一个单独的进程,但这些进程与其他正常进程有些不同.我将在以下段落中解释其中的差异.
线程通常与术语轻量级过程或LWP混合使用.原因可以追溯到Linux仅支持用户级别的线程的时间.这意味着即使多线程应用程序也被内核视为单个进程.这对管理这些用户级线程的库提出了很大的挑战,因为它必须处理线程执行没有阻碍任何其他线程发出阻塞调用的情况.
稍后,实现发生了变化,并且每个线程都附加了进程,以便内核可以处理它们.但是,如前所述,Linux内核不会将它们视为线程,每个线程都被视为内核中的进程.这些过程称为轻量级过程.
轻量级进程(LWP)和正常进程之间的主要区别在于LWP共享相同的地址空间和其他资源(如打开文件等).由于某些资源是共享的,因此与其他正常进程相比,这些进程被认为是轻量级的因而名称轻量级过程.
因此,有效地我们可以说线程和轻量级过程是相同的.只是该线程是在用户级别使用的术语,而轻量级处理是在内核级别使用的术语.
从实现的角度来看,线程是使用Linux中符合POSIX的pthread库公开的函数创建的.在内部,clone()函数用于创建正常和光亮权重过程.这意味着创建一个正常的进程fork()用于进一步使用适当的参数调用clone(),而在创建线程或LWP时,pthread库中的函数调用带有相关标志的clone().因此,主要的区别是通过使用可以传递给clone()函数的不同标志生成的.
在各自的手册页上阅读有关fork()和clone()的更多信息.