并发和同步之间的区别?

时间:2013-11-15 09:25:49

标签: parallel-processing operating-system

现在我正在研究并行计算和算法我对术语concurrent executionsimultaneous execution有点困惑。

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

1 个答案:

答案 0 :(得分:8)

同时执行是关于利用多个资源(核心,HW线程等)以便同时执行多个任务。任务不必以任何方式进行交互,例如,您可以在两个不同的核心上同时运行两个不同的应用程序,或者在同一核心上运行。 设计能够同时执行多个任务的系统的技术可以说是处理同时执行。例如,超线程也被称为“SMT”,同时多线程,因为它处理在单个核心上同时运行两个线程及其完整上下文的能力(这是英特尔的方法,AMD有一个稍微不同的解决方案,请参阅 - Difference between intel and AMD multithreading

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

如果任务设计正确(具有适当的锁定,障碍,信号量以及保证正确数据流的任何内容)并且操作系统正常工作(例如在上下文切换时保存状态或清除缓存并在需要时击落TLB条目),然后它可以运行任何形式的执行模型“引擎盖下”。

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

这个帖子中有很多例子(附加链接到源码 - 我不会在这里复制它以避免剽窃:) - What is the difference between concurrency and parallelism?