【发布时间】:2011-03-24 15:51:47
【问题描述】:
与进程相比,线程确实不太可能从多核处理器中受益吗?换句话说,内核会决定在单核上而不是在多核上执行线程吗?
我说的是属于同一个进程的线程。
【问题讨论】:
标签: linux multithreading process
与进程相比,线程确实不太可能从多核处理器中受益吗?换句话说,内核会决定在单核上而不是在多核上执行线程吗?
我说的是属于同一个进程的线程。
【问题讨论】:
标签: linux multithreading process
多个单线程进程对系统而言比单个多线程进程更昂贵。但他们将受益于具有相同效率的多核 CPU。加上线程间通信比进程间通信便宜得多。如果这些线程真的形成单个应用程序,我会投票支持多线程。
【讨论】:
这对我来说是个新闻。尤其是 Linux,线程和进程之间几乎没有区别。它们实际上只是共享其地址空间的进程。
【讨论】:
我不知道(各种)Linux 调度程序如何处理这个问题,但是当线程在不同的内核上运行时,线程间通信会变得更加昂贵。
因此调度程序可能决定在同一 CPU 上运行一个进程的线程如果有其他进程需要 CPU 时间。
例如,对于双核 CPU,如果有两个进程有两个线程并且都在使用它们获得的所有 CPU 时间,那么最好在第一个 Core 上运行第一个进程的两个线程,然后在第一个 Core 上运行两个线程第二个核心上的另一个进程。
【讨论】:
虽然 Windows 使用光纤和线程,但我有时认为 Linux 使用进程和麻线。 我发现在编写多线程进程时,你必须严格、迂腐、有纪律和血腥地设计线程进程,以便它们在使用机器上可用的任何数量的内核时实现利益平衡该进程将继续运行。
在 Linux 上,与进程相比,线程是否不太可能从多核处理器中受益?没有人知道。
【讨论】:
共享内存多线程在从您的工具链到开发、调试、推理和测试代码的所有方面都带来了巨大的复杂性成本。切勿在可以合理使用多进程设计的情况下使用共享内存多线程。
@Marcelo 是对的,任何体面的操作系统都会非常相似地处理线程和进程,线程的一些 cpu 亲和性可能会减少多线程进程的多处理器使用,但是你应该看到任何两个共享的进程也是一个常见的 .text 段。
根据复杂性和架构设计限制来选择线程与进程,速度几乎永远不会考虑。
【讨论】:
这实际上都取决于调度程序、多处理类型和当前运行环境。
什么都不做,测试,测试,测试!
如果您是系统上唯一的多线程进程,多线程通常是个好主意。
但是,从易于开发的角度来看,有时您需要单独的地址空间和共享数据,尤其是在 NUMA 系统中。
有一件事是肯定的:如果它是一个“超线程”系统,线程由于紧密的内存共享而效率更高。
如果是常规的多核处理..应该是类似的。
如果是 NUMA 系统,您最好保持数据共享和代码分开。同样,这完全取决于架构,除非您从事 HPC 业务,否则性能无关紧要。
如果您从事 HPC(超级计算)业务,请测试!这完全取决于机器(平均收益为 10-25%,如果您谈论的是差异天数,这很重要)
【讨论】: