【问题标题】:threads and LWP in LinuxLinux 中的线程和 LWP
【发布时间】:2015-02-12 11:36:14
【问题描述】:

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

那么,Linux 到底有没有 LWP?

【问题讨论】:

标签: linux multithreading lightweight-processes


【解决方案1】:

从这个博客你可以找到你的答案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() 的更多信息。

【讨论】:

  • 但如果“线程和轻量级进程相同”为什么存在两个术语?
  • 只是线程是用户级别的术语,而轻量级进程是内核级别的术语。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2011-03-09
相关资源
最近更新 更多