multithreading - “并发”与 'Parallelism' -- 'Threads' 与 'Processes'

标签 multithreading concurrency parallel-processing

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

这是否意味着线程无法在多个 CPU 内核上真正并行运行——或者是否意味着如果您需要在多个物理 CPU 芯片上运行计算,多进程计算是唯一可行的选择,例如集群网络 super 计算机?

我希望得到澄清!

最佳答案

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

  • 进程是由操作系统管理的实体,通常是程序的执行;
  • 线程是进程中按顺序执行指令的实体。

在此上下文中,进程有一定数量的状态,由操作系统维护以记录寄存器、内存、权限等的详细信息。此状态的大小通常大于线程的大小,因此管理开销流程(如您所说)更大。参见 Wikipedia了解更多详情。

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

传统的并行处理器是共享内存,传统的操作系统是 Linux。 Linux 支持在共享内存(对称)多核上并行执行进程和线程,但它不支持在多个处理器上执行进程(或线程)(也就是说,除非它们处于共享内存配置中)。已经有许多分布式操作系统旨在支持在没有共享内存的情况下在多个处理器上执行进程或线程,但这些操作系统从未流行起来;见Wikipedia .

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

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

关于multithreading - “并发”与 'Parallelism' -- 'Threads' 与 'Processes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571339/

相关文章:

java - 在对象上调用 setter 后安全发布 Java 对象

c - 必须在多大程度上使用原子类型来保证跨线程可见性?

java - 使用 Apache Commons Exec 运行进程时从控制台获取所有输出数据

java - 并发java

parallel-processing - 限制Matlab的并行工具箱使用所有内核

java - 线程的空指针异常

swift - iOS swift 操作队列

java - 同步方法有自己的锁吗?

multithreading - Maven Sonarqube 插件 : Multithreading

linux - 您如何为 PIGZ(并行 gzip)准备压缩流?