'并发性'与'并行性'-'线程'与'流程'

亨里克·希莱斯塔德·洛沃尔德(Henrik HillestadLøvold)

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

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

我希望得到澄清!

詹姆士

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

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

在这种情况下,进程具有一定数量的状态,该状态由操作系统维护,以记录寄存器,内存,权限等的详细信息。此状态的大小通常大于线程的大小,因此,管理进程的开销(例如你说)更大。有关更多详细信息,请参见Wikipedia

因此,为回答您的问题,如果执行线程和进程的操作系统或基础体系结构支持线程和进程(如上定义),可以在多个处理器上并行执行这些线程和进程

常规的并行处理器是共享内存,常规的操作系统是Linux。Linux支持在共享内存(对称)多核上并行执行进程和线程,但不支持在多个处理器上执行进程(或线程)(也就是说,除非它们处于共享内存配置中)。已经有许多分布式操作系统设计用来支持在没有共享内存的情况下在多个处理器上执行进程或线程,但是它们从未流行起来。参见维基百科

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何同步文件写入以实现线程之间的最大并发性

来自分类Dev

线程子流程并获得进度

来自分类Dev

Java线程创建流程

来自分类Dev

Java并发性-最好是拥有带锁的线程列表或一个带请求列表的线程?

来自分类Dev

将执行从一个线程转移到另一个线程以实现任务并行性和逐个调用

来自分类Dev

限制异步方法的并行性,并且不阻塞线程池线程

来自分类Dev

'并发性'与'并行性'-'线程'与'流程'

来自分类Dev

Haskell中的并发性:如果单线程但设置了+ RTS -N怎么办

来自分类Dev

Ruby中的线程使用:有没有一种方法可以通过并行性来加快执行速度?

来自分类Dev

从基于线程的管道转换到基于任务的并行性?(C ++)

来自分类Dev

Golang中的生产者消费者-并发与并行性?

来自分类Dev

Spark如何在多核或超线程机器上的一项任务中实现并行性

来自分类Dev

Erlang如何在不使用OS线程的情况下实现并发性?

来自分类Dev

如何在不同的内核上运行4个线程(并行性)?

来自分类Dev

这个Ruby代码是否正确使用了线程,线程池和并发性

来自分类Dev

运行并行的,IO绑定的操作,这些操作以“随机”的间隔重复,并限制了最大并发性

来自分类Dev

多次并行调用lambda似乎是在50个并发批次中执行,而不是具有更高的指定保留并发性

来自分类Dev

Cuda动态并行性:可以创建的子线程深度

来自分类Dev

OpenMP嵌套并行性:为什么只有主线程并运行for循环四次?

来自分类Dev

如何同步文件写入以实现线程之间的最大并发性

来自分类Dev

线程子流程的奇怪输出

来自分类Dev

JavaFX并发性:多个线程修改单个StringProperty

来自分类Dev

仿真线程和数据编写器线程并行性

来自分类Dev

生产者/消费者线程并发性Java

来自分类Dev

从基于线程的流水线转移到基于任务的并行性?(C ++)

来自分类Dev

Ruby中的线程会提高并发性吗?

来自分类Dev

多线程检查映射大小和并发性

来自分类Dev

java并发-是否在底层使用了指令级并行性(ILP)

来自分类Dev

C - 将数组划分为线程并使用并行性找到最大数量

Related 相关文章

  1. 1

    如何同步文件写入以实现线程之间的最大并发性

  2. 2

    线程子流程并获得进度

  3. 3

    Java线程创建流程

  4. 4

    Java并发性-最好是拥有带锁的线程列表或一个带请求列表的线程?

  5. 5

    将执行从一个线程转移到另一个线程以实现任务并行性和逐个调用

  6. 6

    限制异步方法的并行性,并且不阻塞线程池线程

  7. 7

    '并发性'与'并行性'-'线程'与'流程'

  8. 8

    Haskell中的并发性:如果单线程但设置了+ RTS -N怎么办

  9. 9

    Ruby中的线程使用:有没有一种方法可以通过并行性来加快执行速度?

  10. 10

    从基于线程的管道转换到基于任务的并行性?(C ++)

  11. 11

    Golang中的生产者消费者-并发与并行性?

  12. 12

    Spark如何在多核或超线程机器上的一项任务中实现并行性

  13. 13

    Erlang如何在不使用OS线程的情况下实现并发性?

  14. 14

    如何在不同的内核上运行4个线程(并行性)?

  15. 15

    这个Ruby代码是否正确使用了线程,线程池和并发性

  16. 16

    运行并行的,IO绑定的操作,这些操作以“随机”的间隔重复,并限制了最大并发性

  17. 17

    多次并行调用lambda似乎是在50个并发批次中执行,而不是具有更高的指定保留并发性

  18. 18

    Cuda动态并行性:可以创建的子线程深度

  19. 19

    OpenMP嵌套并行性:为什么只有主线程并运行for循环四次?

  20. 20

    如何同步文件写入以实现线程之间的最大并发性

  21. 21

    线程子流程的奇怪输出

  22. 22

    JavaFX并发性:多个线程修改单个StringProperty

  23. 23

    仿真线程和数据编写器线程并行性

  24. 24

    生产者/消费者线程并发性Java

  25. 25

    从基于线程的流水线转移到基于任务的并行性?(C ++)

  26. 26

    Ruby中的线程会提高并发性吗?

  27. 27

    多线程检查映射大小和并发性

  28. 28

    java并发-是否在底层使用了指令级并行性(ILP)

  29. 29

    C - 将数组划分为线程并使用并行性找到最大数量

热门标签

归档