Multithreading ';并发性';vs';并行性';——';螺纹';vs';过程';

Multithreading ';并发性';vs';并行性';——';螺纹';vs';过程';,multithreading,concurrency,parallel-processing,Multithreading,Concurrency,Parallel Processing,我知道并发性(CPU进程交换)和并行性(多核上实时并行运行的进程)之间的区别。我想知道的是线程和进程在所有这一切中扮演什么角色。我知道每个操作系统都是不同的,CPU调度也因操作系统和虚拟机而异。通常,线程的开销要小得多,与进程相比,线程的CPU交换通常更快。但是当我读到多进程计算时,每个人似乎都同意这是在多个CPU上并行计算的唯一选择 这是否意味着线程不能在多个CPU核上真正并行运行?或者,如果需要在多个物理CPU芯片(如群集网络超级计算机)上运行计算,那么多进程计算是唯一可行的选择 我希望得到

我知道并发性(CPU进程交换)和并行性(多核上实时并行运行的进程)之间的区别。我想知道的是线程和进程在所有这一切中扮演什么角色。我知道每个操作系统都是不同的,CPU调度也因操作系统和虚拟机而异。通常,线程的开销要小得多,与进程相比,线程的CPU交换通常更快。但是当我读到多进程计算时,每个人似乎都同意这是在多个CPU上并行计算的唯一选择

这是否意味着线程不能在多个CPU核上真正并行运行?或者,如果需要在多个物理CPU芯片(如群集网络超级计算机)上运行计算,那么多进程计算是唯一可行的选择

我希望得到澄清

每个人似乎都同意,这是在多个CPU上并行计算的唯一选择

我从来没听说过这个。无论如何,这不是真的

这是否意味着线程不能在多个CPU核上真正并行运行

线程是大多数操作系统的调度单元。进程不是调度单元。最重要的是,它们作为调度启发式的输入发挥作用。线程在CPU上运行(并行),而不是进程

或者,如果需要在多个物理CPU芯片(如群集网络超级计算机)上运行计算,这是否意味着多进程计算是唯一可行的选择

否。进程不会增强操作系统的调度功能


这个问题问得不太准确。我希望我能澄清要点。

首先,澄清您使用的术语:

  • 进程是由操作系统管理的实体,通常是程序的执行
  • 线程是进程中按顺序执行指令的实体
在此上下文中,进程具有一定数量的状态,由操作系统维护,以记录寄存器、内存、权限等的详细信息。此状态的大小通常大于线程的大小,因此管理进程的开销(如您所说)更大。有关更多详细信息,请参阅

因此,为了回答您的问题,线程和进程(如上定义)可以在多个处理器上并行执行,前提是执行它们的操作系统或底层体系结构支持它

传统的并行处理器是共享内存,传统的操作系统是Linux。Linux支持在共享内存(对称)多核上并行执行进程和线程,但不支持在多个处理器上执行进程(或线程)(即,除非它们处于共享内存配置中)。有许多分布式操作系统被设计为支持在没有共享内存的多个处理器上执行进程或线程,但这些系统从未流行;看

传统的基于集群的系统(如超级计算机)使用MPI在处理器之间并行执行。MPI是在不同处理器上的操作系统实例中执行的进程之间的通信接口;它不支持其他流程操作,例如调度。(由于MPI进程是由操作系统执行的,因此一个处理器可以运行多个MPI进程和/或一个MPI进程也可以执行多个线程,这可能会使事情进一步复杂化!)


最后,一个简单(尽管非传统)的例子是XMOS处理器体系结构,其中线程和进程的含义略有不同。这允许将多个处理器芯片连接在一起,并允许顺序执行的多个线程在它们之间执行和通信,无需操作系统。

线程和进程之间的主要区别在于同一进程内的线程共享同一(虚拟)内存。在具有多个CPU芯片的系统上,芯片可能比其他区域(与其他CPU的连接效率更高)更有效地访问系统总内存的某个区域。在这种情况下,在CPU上分割一个进程的多个线程将是低效的(或不可能的)。在这个问题中,许多假设/观点,我会考虑假或不共享。USR:如果你能编辑你发现的问题的部分,我将非常高兴: