28

我在这里找到了问题的答案。但我不明白答案中的一些想法。例如,轻量级进程被称为与其他进程共享其逻辑地址空间。这是什么意思?我可以理解 2 个线程的相同情况:它们都共享一个地址空间,因此它们都可以从 bss 段中读取任何变量(例如)。但是我们有很多不同的进程,有不同的 bss 部分,我不知道如何共享所有这些。

4

8 回答 8

26

我不确定这里的答案是否正确,所以让我发布我的版本。

进程 - LWP(轻量级进程)和用户线程之间存在差异。我将把流程定义放在一边,因为它或多或少为人所知并专注于LWP vs user threads. LWP 本质上就是今天所说的线程。最初,用户线程是指由应用程序本身管理的线程,内核对此一无所知。另一方面,LWP 是内核调度和执行的一个单元。

示例:假设系统有 3 个其他进程正在运行,并且调度是没有优先级的循环。你有 1 个处理器/内核。

选项 1。您有 2 个用户线程使用一个 LWP。这意味着从操作系统的角度来看,您拥有一个调度单元。总共有 4 个 LWP 正在运行(其他 3 个 + 你的 1 个)。您的 LWP 获得总 CPU 时间的 1/4,并且由于您有 2 个用户线程,因此每个线程获得总 CPU 时间的 1/8(取决于您的实现)

选项 2。你有 2 个 LWP。从操作系统的角度来看,您有两个调度单元。总共有 5 个 LWP 正在运行。您的 LWP 每次获得总 CPU 时间的 1/5,而您的应用程序获得 2/5 的 CPU。

另一个粗略的区别 - LWP 有 pid(进程 ID),用户线程没有。

出于某种原因,命名有点混乱,我们将 LWP 称为线程。

肯定有更多差异,但请参阅幻灯片。 http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt

编辑:

发布后,我发现了一篇很好的文章,它解释了所有的细节,而且英语比我写的要好。 http://www.thegeekstuff.com/2013/11/linux-process-and-threads/

于 2016-11-28T15:36:38.497 回答
10

来自 MSDN,线程和进程

进程存在于操作系统中,对应于用户所看到的程序或应用程序。另一方面,线程存在于进程中。出于这个原因,线程有时被称为轻量级进程。每个进程由一个或多个线程组成。

于 2012-05-07T16:46:35.527 回答
4

根据 Tanenbaum 的《分布式系统》一书,轻量级进程通常被称为用户级线程和内核级线程的混合形式。一个 LWP 在单个进程的上下文中运行,每个进程可以有多个 LWP。此外,每个 LWP 都可以运行自己的(用户级)线程。多线程应用程序是通过创建线程(使用线程库包),然后将每个线程分配给一个 LWP 来构建的。

使用这种混合方法的最大优点是创建、销毁和同步线程相对便宜,并且不需要任何内核干预。除此之外,只要一个进程有足够的 LWP,阻塞系统调用就不会挂起整个进程。

于 2018-12-18T16:38:28.493 回答
1

这里。每个 LWP 都是内核池中的一个内核资源,并且在每个线程的基础上附加和分离到一个线程。这发生在线程被调度或创建和销毁时。

在此处输入图像描述

于 2018-11-13T18:22:14.190 回答
1

IMO,LWP 是一个内核线程绑定,可以在用户上下文中创建和执行。

如果我没记错的话,您可以将用户线程附加到单个 LWP 以潜在地提高并发级别,而无需涉及系统调用。

于 2018-05-23T21:43:28.123 回答
1

线程基本上是分配有一个目标和足够信息来执行特定任务的任务。一个进程可以创建多个线程以尽可能快地完成其工作。例如,程序的一部分可能需要输入输出,一部分可能需要权限。

用户级线程是那些可以由线程库处理的线程。

另一方面,内核级线程(需要处理hadrware)也称为LWP(轻量级进程),以最大限度地利用系统,因此系统不会因一次系统调用而停止。

于 2018-06-28T07:29:06.697 回答
1

线程在进程中运行。

每个进程可能包含一个或多个线程。

如果内核对进程中运行的线程一无所知,我们就会在用户空间上运行线程,因此没有可用的多处理功能。

另一方面,我们可以让线程在内核空间上运行;这意味着每个进程在不同的 CPU 上运行。这使我们能够进行多处理,但您可能会认为它在操作系统资源方面更昂贵。

最后,有一个介于中间的解决方案;我们将线程组合到 LWP 中。每个组在不同的 CPU 上运行,但组中的线程不能进行多处理。这是因为这个版本的内核只知道组(多进程),但对它们包含的线程一无所知。希望它足够清楚。

于 2018-06-30T11:01:06.887 回答
0

一个进程包含一个或多个线程,一个线程可以做任何一个进程可以做的事情。此外,进程内的线程共享相同的地址空间,因为线程之间的通信成本较低,因为它使用相同的代码段、数据段和操作系统资源,因此线程的所有这些特性使其成为“轻量级进程”。

于 2015-04-26T10:51:35.007 回答