【问题标题】:Linux: Processes and Threads in a Multi-core CPULinux:多核 CPU 中的进程和线程
【发布时间】:2011-03-24 15:51:47
【问题描述】:

与进程相比,线程确实不太可能从多核处理器中受益吗?换句话说,内核会决定在单核上而不是在多核上执行线程吗?

我说的是属于同一个进程的线程。

【问题讨论】:

    标签: linux multithreading process


    【解决方案1】:

    多个单线程进程对系统而言比单个多线程进程更昂贵。但他们将受益于具有相同效率的多核 CPU。加上线程间通信比进程间通信便宜得多。如果这些线程真的形成单个应用程序,我会投票支持多线程。

    【讨论】:

    • "但他们将受益于具有相同效率的多核 CPU。" “他们”是指进程还是线程? “但是”让我很困惑,抱歉。
    • 这不是真的,来自同一进程的两个线程在不同的内核上运行需要大量的内存/缓存同步,而单独的进程不需要这些同步
    • @tolomea 也不是这样,如果您需要同时写入共享内存,无论线程或进程如何,都会产生内存一致性成本。操作系统调度线程和进程; CPU 内核将通过他们得到的任何程序计数器爆炸。大多数主流处理器也至少有一个共享缓存级别,并且窥探写入以保持内存视图的连贯性,而无需通过主内存。在多个 CPU 之间共享内存时,这会变得更加昂贵,但无论共享访问来自何处,它都同样糟糕
    【解决方案2】:

    这对我来说是个新闻。尤其是 Linux,线程和进程之间几乎没有区别。它们实际上只是共享其地址空间的进程。

    【讨论】:

    • 显然它写在文档的某个地方。不过,我宁愿相信你的话而不是一个模糊的谣言。
    • 看看clone()系统调用。
    【解决方案3】:

    我不知道(各种)Linux 调度程序如何处理这个问题,但是当线程在不同的内核上运行时,线程间通信会变得更加昂贵。

    因此调度程序可能决定在同一 CPU 上运行一个进程的线程如果有其他进程需要 CPU 时间

    例如,对于双核 CPU,如果有两个进程有两个线程并且都在使用它们获得的所有 CPU 时间,那么最好在第一个 Core 上运行第一个进程的两个线程,然后在第一个 Core 上运行两个线程第二个核心上的另一个进程。

    【讨论】:

      【解决方案4】:

      虽然 Windows 使用光纤和线程,但我有时认为 Linux 使用进程和麻线。 我发现在编写多线程进程时,你必须严格、迂腐、有纪律和血腥地设计线程进程,以便它们在使用机器上可用的任何数量的内核时实现利益平衡该进程将继续运行。

      在 Linux 上,与进程相比,线程是否不太可能从多核处理器中受益?没有人知道。

      【讨论】:

        【解决方案5】:

        共享内存多线程在从您的工具链到开发、调试、推理和测试代码的所有方面都带来了巨大的复杂性成本。切勿在可以合理使用多进程设计的情况下使用共享内存多线程。

        @Marcelo 是对的,任何体面的操作系统都会非常相似地处理线程和进程,线程的一些 cpu 亲和性可能会减少多线程进程的多处理器使用,但是你应该看到任何两个共享的进程也是一个常见的 .text 段。

        根据复杂性和架构设计限制来选择线程与进程,速度几乎永远不会考虑。

        【讨论】:

        • 我同意设计应该是第一位的,但是当你说“永远不要使用共享内存多线程”时,你是在自相矛盾。我理解你所说的线程更复杂的意思,但这有点夸张。我将坚持使用线程,除非使用进程有意义(也许对于“多文档”应用程序)。
        【解决方案6】:

        这实际上都取决于调度程序、多处理类型和当前运行环境。

        什么都不做,测试,测试,测试!

        如果您是系统上唯一的多线程进程,多线程通常是个好主意。

        但是,从易于开发的角度来看,有时您需要单独的地址空间和共享数据,尤其是在 NUMA 系统中。

        有一件事是肯定的:如果它是一个“超线程”系统,线程由于紧密的内存共享而效率更高。

        如果是常规的多核处理..应该是类似的。

        如果是 NUMA 系统,您最好保持数据共享和代码分开。同样,这完全取决于架构,除非您从事 HPC 业务,否则性能无关紧要。

        如果您从事 HPC(超级计算)业务,请测试!这完全取决于机器(平均收益为 10-25%,如果您谈论的是差异天数,这很重要)

        【讨论】:

          最近更新 更多