相对于进程而言,线程是否更不容易受益于多核处理器?换句话说,内核是否会决定在单个核心上执行线程而不是在多个核心上执行?
我说的是属于同一进程的线程。
相对于进程而言,线程是否更不容易受益于多核处理器?换句话说,内核是否会决定在单个核心上执行线程而不是在多个核心上执行?
我说的是属于同一进程的线程。
多个单线程进程对系统的开销比单个多线程进程更大。但它们将以相同的效率从多核CPU中受益。此外,线程间通信比进程间通信要便宜得多。如果这些线程确实形成单个应用程序,则我投票支持多线程。
这对我来说是新闻。特别是在Linux系统中,线程和进程之间的区别不大。它们实际上只是共享地址空间的进程。
共享内存多线程对于从工具链到开发、调试、推理和测试代码的所有方面都会带来巨大的复杂性成本。只要可以合理使用多进程设计,就不要使用共享内存多线程。
@Marcelo是正确的,任何好的操作系统都会将线程和进程视为非常相似的,一些线程的CPU亲和力可能会降低多线程进程的多处理器使用率,但你也应该看到任何共享公共.text段的两个进程也会有这种情况。
根据复杂性和架构设计约束选择线程与进程,速度几乎永远不会成为问题。
这实际上完全取决于调度程序、多处理类型和当前运行环境。
不要假设,测试,测试,测试!
如果您是系统上唯一的多线程进程,则多线程通常是一个好主意。
然而,从开发的易用性角度来看,有时您需要单独的地址空间和共享数据,特别是在NUMA系统中。
有一件事可以确定:如果它是“超线程”系统,则由于紧密的内存共享,线程效率要高得多。
如果它是常规的多核处理...应该类似。
如果它是NUMA系统,则最好保持数据共享和代码分离。同样,这完全取决于架构,并且除非您从事HPC业务,否则在性能方面并不重要。
如果您从事HPC(超级计算)业务,请进行测试!这完全取决于机器(平均受益为10-25%,如果您谈论的是天数差异,则很重要)
尽管Windows使用纤程和线程,但我有时认为Linux使用进程和绳子。
我发现,在编写多线程进程时,您必须严谨、苛求、自律并且要在设计线程进程时非常努力,以便它们能够在运行该进程的机器上利用可用的任何核心数量来实现平衡的效益。
在Linux上,相对于进程而言,线程是否不太可能从多核处理器中受益?没有人知道。