我确实知道并发(CPU进程交换)和并行性(在多个内核上实时并行运行的进程)之间的区别。我想知道的是线程和进程在所有这些中扮演的角色。我知道每个操作系统都不同,CPU调度因操作系统,操作系统和虚拟机而异。通常,线程的开销要小得多,与进程相比,线程的CPU交换通常更快。但是当我读到多进程计算时,每个人似乎都同意这是并行计算多个CPU的唯一选择。
这是否意味着线程无法在多个CPU内核上实际并行运行 - 或者这是否意味着如果您需要在多个物理CPU芯片上运行计算,多进程计算是唯一可行的选择,例如集群网络超级计算机?
我希望得到澄清!
答案 0 :(得分:2)
首先,澄清您正在使用的术语:
在此上下文中,进程具有一定量的状态,由操作系统维护以记录寄存器,内存,权限等的详细信息。此状态的大小通常大于线程的大小,因此管理的开销流程(如你所说)更大。有关详细信息,请参阅Wikipedia。
因此,为了回答您的问题,线程和进程(如上所述)可以在多个处理器上并行执行,如果执行它们的操作系统或底层架构支持它强>
传统的并行处理器是共享内存,传统的操作系统是Linux。 Linux支持在共享内存(对称)多核上并行执行进程和线程,但它不支持在多个处理器上执行进程(或线程)(即,除非它们处于共享内存配置中)。有许多分布式操作系统旨在支持多个处理器上没有共享内存的进程或线程的执行,但这些操作系统从未流行过;见Wikipedia。
传统的基于群集的系统(如超级计算机)在使用MPI的处理器之间采用并行执行。 MPI是在不同处理器上的操作系统实例中执行的进程之间的通信接口;它不支持其他流程操作,如调度。 (存在进一步复杂化的风险,因为MPI进程由操作系统执行,单个处理器可以运行多个MPI进程和/或单个MPI进程也可以执行多个线程!)
最后,一个简单的(虽然是非常规的)示例,其中线程和进程的含义略有不同,是XMOS处理器架构。这允许多个处理器芯片连接在一起,并允许多个顺序执行线程执行并在它们之间进行通信,没有操作系统。
答案 1 :(得分:0)
每个人似乎都同意这是并行计算多个CPU的唯一选择。
我从未听过这个。无论如何,这不是真的。
这是否意味着线程无法在多个CPU内核上实际并行运行
线程是大多数操作系统中的调度单位。进程不是调度单位。他们最多只是作为调度启发式的输入。线程在CPU上运行(并行),而不是进程。
或者它是否意味着如果您需要在多个物理CPU芯片(例如集群网络超级计算机)上运行计算,那么多进程计算是唯一可行的选择?
没有。进程不会增强操作系统的调度功能。
问题不是很精确。我希望我能澄清一些重点。