【问题标题】:What is the difference between lightweight process and thread?轻量级进程和线程有什么区别?
【发布时间】:2012-05-16 02:16:58
【问题描述】:

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

【问题讨论】:

  • 您似乎对某些概念很困惑。建议你先研究一下线程和进程的定义。
  • @Gray,我非常清楚进程和线程之间的区别。问题在于理解轻量级流程。
  • @Tudor,我找到并理解了它(在“理解 Linux 内核”中)。
  • 当然@Allok。该页面上有一些关于轻量级进程的详细信息。

标签: multithreading process lightweight-processes


【解决方案1】:

来自 MSDN,Threads and Processes

进程存在于操作系统中,并对应于什么用户 视为程序或应用程序。另一方面,存在线程 一个进程内。 出于这个原因,线程有时被称为 作为轻量级进程。 每个进程由一个或多个 线程。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      进程 - 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/

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

            线程在进程中运行。

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

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

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2010-09-17
                  • 2011-01-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-29
                  • 1970-01-01
                  相关资源
                  最近更新 更多