轻量级进程和线程之间有什么区别?

31

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


1
可能是重复的问题,类似于https://dev59.com/LHVC5IYBdhLWcg3wtzyt。 - Gray
@Gray, 我非常清楚地理解进程和线程之间的区别。问题在于理解轻量级进程。 - Allok
@Tudor,我找到了它并理解了它(在“理解Linux内核”中)。 - Allok
当然,@Allok。那个页面上有一些关于轻量级进程的细节。 - Gray
@Allok:你在问题中提到两个进程共享一个地址空间,这是不正确的。同一进程的两个线程共享同一地址空间。 - Tudor
显示剩余2条评论
8个回答

26
我不确定这里的答案是否正确,所以让我发表我的版本。
进程(LWP)和用户线程之间存在区别。我将忽略进程定义,因为这更或多或少是已知的,并专注于 LWP 与用户线程的比较。
现在通常称 LWP 为线程。最初,用户线程指的是由应用程序自己管理的线程,内核对此一无所知。
另一方面,LWP 是由内核调度和执行的一个单元。
例如: 假设系统有 3 个其他正在运行的进程,并且调度是轮询而没有优先级。而你只有一个处理器/核心。
选项 1. 您有 2 个使用一个 LWP 的用户线程。这意味着从操作系统的角度来看,您有一个调度单元。总共有 4 个正在运行的 LWP(3 个其他人+1 个您的)。您的 LWP 获得总 CPU 时间的 1/4,由于您有 2 个用户线程,每个线程获得总 CPU 时间的 1/8(取决于您的实现)。

选项2。你有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.thegeekstuff.com/2013/11/linux-process-and-threads/


12
从MSDN中的线程和进程页面得知:

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


6
基于Tanenbaum的书籍“分布式系统”,轻量级进程通常被称为用户级线程和内核级线程的混合形式。LWP在单个进程的上下文中运行,每个进程可以有多个LWP。此外,每个LWP都可以运行自己的(用户级)线程。通过创建线程(使用线程库包),然后将每个线程分配给LWP来构建多线程应用程序。
使用这种混合方法的最大优点是创建、销毁和同步线程相对便宜,并且不需要任何内核干预。此外,只要进程有足够的LWP,阻塞系统调用将不会挂起整个进程。

2

线程运行在进程内。

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

如果内核不知道进程中正在运行的线程,则我们有在用户空间运行的线程,因此无法使用多进程能力。

另一方面,我们可以在内核空间运行线程;这意味着每个进程在不同的CPU上运行。这使我们能够进行多处理,但正如您所想象的那样,在操作系统资源方面更加昂贵。

最后,有一个介于两者之间的解决方案;我们将线程组合成LWP。每个组在不同的CPU上运行,但组中的线程不能被多处理。这是因为内核在这个版本中只知道组(它们是多处理的),而不知道它们包含的线程。


1

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

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


1

线程基本上是分配了一个目标和足够的信息以执行特定任务的任务。

一个进程可以创建多个线程来尽可能快地完成工作。例如,程序的某一部分可能需要输入输出,另一部分可能需要权限。

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

另一方面,内核级别线程(需要处理硬件)也称为LWP(轻量级进程),以最大化系统的使用,使系统不会在仅一个系统调用时停止运行。


1

这里开始。每个LWP是内核池中的一个内核资源,会按照每个线程的基础进行附加和分离。这种情况发生在线程被调度、创建和销毁时。

enter image description here


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接