Parallel processing 并发和并发之间的区别?

Parallel processing 并发和并发之间的区别?,parallel-processing,operating-system,Parallel Processing,Operating System,现在我正在学习并行计算和算法,我对术语并发执行和并发执行有点困惑 这些术语之间有什么区别?什么时候我们必须在并行计算中使用并发,什么时候我们必须使用并发 同步执行是指利用多个资源(核心、硬件线程等)同时执行多个任务。这些任务不必以任何方式交互,例如,您可能有两个不同的应用程序同时运行在两个不同的内核上,或者运行在同一个内核上。 设计能够同时执行多个任务的系统的艺术可以说是处理同时执行的问题。例如,超线程也被称为“SMT”,即同步多线程,因为它处理的是在单个内核上同时运行两个线程及其完整上下文的能

现在我正在学习并行计算和算法,我对术语
并发执行
并发执行
有点困惑


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

同步执行是指利用多个资源(核心、硬件线程等)同时执行多个任务。这些任务不必以任何方式交互,例如,您可能有两个不同的应用程序同时运行在两个不同的内核上,或者运行在同一个内核上。
设计能够同时执行多个任务的系统的艺术可以说是处理同时执行的问题。例如,超线程也被称为“SMT”,即同步多线程,因为它处理的是在单个内核上同时运行两个线程及其完整上下文的能力(这是Intels的方法,AMD有一个稍微不同的解决方案,请参见-)

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

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

因为您指的是并行算法,所以对您来说合适的术语可能是并发执行


这篇文章中有很多例子(还有到资料来源的附加链接——为了避免抄袭,我不在这里复制):

我喜欢这个答案。但我还是有疑问。你能详细说明一下吗:“……同时多线程,因为它处理的是在一个内核上同时运行两个线程及其完整上下文的能力……”。我的意思是,两个线程是否可能在同一个内核上同时执行。@ShirgillAnsari,这就是同步多线程的概念。硬件复制一些组件(逻辑寄存器和体系结构状态元素),拆分其他组件(例如一些队列),并共享其余组件(缓存、预测器、随机分配阵列)。每个CPU的实现可能不同,但有些可能允许您在每个周期中发出和提交来自多个上下文的指令,而另一些可能在每个周期中在它们之间进行仲裁,但来自不同上下文的指令仍将在管道中共存,而无需进行上下文切换。您说,“同时执行是关于利用多个核”。据我所知,你的回答表明,在单个核上不可能同时执行。我说的对吗?@ShirgillAnsari,我写过“同时执行是关于利用多个资源”,其中一个例子是多核(通常称为CMP)-很容易理解每个核心是如何在竞争最少的情况下(只有共享缓存和总线上的一些冲突)不考虑其他核心的情况下进展的。另一个例子是同步多线程(SMT),即使在同一个内核中,也可以有多个上下文。这些上下文并不矛盾,而是相互补充,从而创建可以在给定CPU中同时执行的逻辑内核总数。还存在其他形式的并行性。