4

现在我正在研究并行计算和算法,我对术语concurrent executionsimultaneous execution.

这些术语有什么区别?我们什么时候必须使用concurrent,什么时候必须simultaneous在并行计算中使用?

4

1 回答 1

9

同时执行是指利用多个资源(内核、硬件线程等)同时执行多个任务。这些任务不必以任何方式进行交互,例如,您可能有两个不同的应用程序同时在两个不同的内核上运行,或者在同一个内核上运行。
将系统设计为能够同时执行多个任务的艺术可以说是处理同时执行。例如,超线程也称为“SMT”,即同时多线程,因为它处理在单个内核上同时运行具有完整上下文的两个线程的能力(这是英特尔的方法,AMD 有一点不同的解决方案,请参阅 - Intel 和 AMD 多线程之间的区别

并发是一个位于更高抽象级别的术语,与操作系统世界有关。它是您的执行环境的一个属性,您可以在其中执行多个任务,这些任务可能会随着时间的推移而执行,而您无法控制它们执行的顺序甚至交错形式。它们是否同时在多个核心上运行并不重要,在一个带有 SMT 的核心上,或者甚至在具有某种抢占机制和某种调度算法的单线程核心上同时运行,这些调度算法将任务分成块并在它们之间不断交换。这里重要的是,并发迫使您以一种保证正确性的方式设计您的任务(特别是如果它们交互或共享数据)在具有任何顺序或交错的任何类型的系统上。

如果任务设计正确(具有适当的锁定、屏障、信号量和任何保证正确数据流的东西)并且操作系统正确地完成了它的工作(例如在上下文切换时保存状态或清除缓存并在需要时删除 TLB 条目),那么它可以在“幕后”以任何形式的执行模型运行。

由于您指的是并行算法,因此适合您的术语可能是并发执行。

该线程中有很多示例(带有指向源的其他链接-我不会在此处复制它以避免抄袭:)-并发和并行之间有什么区别?

于 2013-11-18T19:20:32.217 回答