我找到了问题的答案here http://wiki.answers.com/Q/What_is_the_difference_between_LWP_and_threads。但我不明白答案中的一些想法。例如,据说轻量级进程与其他进程共享其逻辑地址空间。这是什么意思?我可以理解 2 个线程的相同情况:它们共享一个地址空间,因此它们都可以从 bss 段读取任何变量(例如)。但是我们有很多不同的进程,有不同的 bss 部分,我不知道如何共享它们。
我不确定这里的答案是否正确,所以让我发布我的版本。
进程-LWP(轻量级进程)和用户线程之间是有区别的。我将把流程定义放在一边,因为这或多或少是众所周知的,并且重点关注LWP vs user threads
。
LWP 本质上就是今天所说的线程。最初,用户线程是指由应用程序本身管理的线程,内核对此一无所知。
另一方面,LWP 是内核调度和执行的单位。
例子:
假设系统有 3 个其他进程正在运行,并且调度是循环的,没有优先级。您有 1 个处理器/核心。
Option 1。您有 2 个用户线程使用一个 LWP。这意味着从操作系统的角度来看,您有一个调度单元。总共有 4 个 LWP 正在运行(另外 3 个 + 你的 1 个)。您的 LWP 获得总 CPU 时间的 1/4,并且由于您有 2 个用户线程,因此每个线程获得总 CPU 时间的 1/8(取决于您的实现)
Option2。你有 2 个 LWP。从操作系统的角度来看,您有两个调度单元。总共有 5 个 LWP 正在运行。您的 LWP 获得总 CPU 时间的 1/5,而您的应用程序获得 CPU 的 2/5。
另一个粗略的区别 - LWP 有 pid(进程 ID),而用户线程没有。
由于某种原因,命名有点混乱,我们将 LWP 称为线程。
肯定还有更多差异,但请参阅幻灯片。http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt
EDIT:
发帖后,我发现了一篇好文章,它更详细地解释了所有内容,而且英语比我写的更好。http://www.thegeekstuff.com/2013/11/linux-process-and-threads/ http://www.thegeekstuff.com/2013/11/linux-process-and-threads/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)