首页 文章

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

提问于
浏览
13

我找到了问题here的答案 . 但我不是't understand some ideas in the answer. For instance, lightweight process is said to share its logical address space with other processes. What does it mean? I can understand the same situation with 2 threads: both of them share one address space, so both of them can read any variables from bss segment (for example). But we'已经有很多不同的进程有不同的bss部分,我不知道如何分享所有这些 .

7 回答

  • 2

    来自MSDN,Threads and Processes

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

  • 4

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

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

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

    选项1.使用一个LWP,您有2个用户线程 . 这意味着从操作系统的角度来看,您有一个调度单元 . 总共有4个LWP在运行(另外3个是你的) . 你的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/

  • 6

    IMO,LWP是 kernel 线程绑定,可以在用户上下文中创建和执行 .

    如果我没有弄错的话,你可以将 user 个线程附加到单个LWP,以便在不涉及系统调用的情况下提高并发性 .

  • 0

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

    User level thread 是可以由线程库处理的那些 .

    另一方面, kernel level thread (需要处理hadrware)也称为LWP(轻量级进程),以最大限度地利用系统,因此系统不会在一次系统调用时停止 .

  • 0

    线程在进程内运行 .

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

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

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

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

  • 1

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

  • 1

    来自here . 每个LWP都是内核池中的内核资源,并且基于每个线程附加和分离到线程 . 这是在调度或创建和销毁线程时发生的 .

    enter image description here

相关问题