线程和Linux中的LWP



这句话正确吗:"Linux中的所有线程都是LWP,但并非所有LWP都是线程"。实际上,我试图理解Linux中的线程实现。pthread_create调用clone syscall,但在man clone中,我没有找到任何对LWP的引用。

那么,Linux有LWP吗?

从这个博客你可以找到答案http://www.thegeekstuff.com/2013/11/linux-process-and-threads/

Linux中的线程不过是进程的一个执行流。A.包含多个执行流的进程称为多线程过程

对于非多线程进程,只有执行流主执行流,因此也称为单线程过程对于Linux内核,没有线程的概念。每个螺纹被内核视为一个单独的进程,但这些进程与其他正常过程有些不同。我会解释以下段落中的差异。

线程通常与术语"轻量过程"或LWP混合使用。原因可以追溯到Linux在仅限用户级别。这意味着即使是多线程应用程序内核仅将其视为单个进程。这带来了巨大的挑战对于管理这些用户级线程的库,因为它处理线程执行没有阻碍的情况(如果有的话)另一个线程发出了阻塞调用。

后来,实施发生了变化,流程被附加到每个线程,以便内核能够处理它们。但是,正如所讨论的以前,Linux内核并不将它们视为线程,每个线程都是视为内核内部的进程。这些过程被称为光称重过程。

轻量化过程(LWP)和正常过程之间的主要区别过程是LWP共享相同的地址空间和其他资源打开文件等。由于一些资源是共享的,因此这些进程与其他正常过程相比,被认为重量较轻因此被称为轻重量处理。

因此,我们可以有效地说,线程和轻量级进程同样。只是线程是一个在用户级别使用的术语,而轻量级过程是在内核级别使用的一个术语。

从实现的角度来看,线程是使用函数创建的由Linux中符合POSIX的pthread库公开。在内部clone()函数用于创建法线和轻量级过程这意味着要创建一个正常的进程,需要使用fork()在创建时使用适当的参数进一步调用clone()线程或LWP,pthread库中的函数调用clone()相关标志。因此,主要差异是通过使用可以传递给clone()函数的不同标志。

在各自的手册页上阅读更多关于fork()和clone()的信息。

相关内容

  • 没有找到相关文章

最新更新