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

时间:2012-05-07 15:00:59

标签: multithreading process lightweight-processes

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

8 个答案:

答案 0 :(得分:7)

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

进程 - LWP(轻量级进程)和用户线程之间存在差异。我会将流程定义放在一边,因为它或多或少已知并专注于LWP vs user threads。 LWP本质上被称为今天的线程。最初,用户线程意味着由应用程序本身管理的线程,并且内核对它没有任何了解。 另一方面,LWP是内核调度和执行的单元。

实施例: 让我们假设系统有3个其他进程在运行,并且调度是循环的而没有优先级。你有1个处理器/核心。

选项1 。您有2个用户线程使用一个LWP。这意味着从操作系统的角度来看,您有一个调度单元。总计有4个LWP正在运行(另外3个+ 1个你的)。你的LWP占用总CPU时间的1/4,因为你有2个用户线程,每个用户线程占用总时间的1/8(取决于你的实现)

选项2 。你有2个LWP。从OS的角度来看,您有两个调度单元。总共有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/

答案 1 :(得分:4)

来自MSDN,Threads and Processes

  

操作系统中存在进程并且对应于哪些用户   看作程序或应用程序。另一方面,存在一个线程   在一个过程中。 出于这个原因,有时会提到线程   轻量级过程。每个过程由一个或多个组成   线程。

答案 2 :(得分:2)

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

如果我没弄错的话,您可以将用户线程附加到单个LWP,以便在不涉及系统调用的情况下提高并发级别。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

线程在进程内运行。

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

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

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

最后,中间有一个解决方案。我们将线程分组为LWP。每个组都在不同的CPU上运行,但是该组中的线程不能进行多进程处理。这是因为此版本中的内核仅了解这些组(它们是多进程的),而不了解它们所包含的线程。 希望它足够清楚。

答案 5 :(得分:0)

进程中包含一个或多个线程,线程可以执行进程可以执行的任何操作。此外,进程中的线程共享相同的地址空间,因为线程之间的通信成本较低,因为它使用相同的代码段,数据段和OS资源,因此线程的所有功能使其成为“轻量级进程”。 / p>

答案 6 :(得分:0)

来自here。 每个LWP是内核池中的内核资源,并且在每个线程的基础上附加和分离到线程。这是在计划,创建或销毁线程时发生的。

enter image description here

答案 7 :(得分:0)

基于Tanenbaum的书“ Distributes Systems”,轻量级进程通常被称为用户级线程和内核级线程的混合形式。 LWP在单个进程的上下文中运行,并且每个进程可以有多个LWP。此外,每个LWP都可以运行自己的(用户级)线程。通过创建线程(带有线程库程序包),然后将每个线程分配给一个LWP来构造多线程应用程序。

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

相关问题