现在我正在研究并行计算和算法,我对术语concurrent execution和simultaneous execution感到有点困惑。
这些术语之间有什么区别?我们什么时候必须使用concurrent,什么时候必须在并行计算中使用simultaneous?
发布于 2013-11-18 19:20:32
同时执行是指利用多个资源(核心、HW线程等)以便同时执行多个任务。这些任务不需要以任何方式交互,您可能有两个不同的应用程序同时运行在两个不同的核上--例如,在同一个核上。
设计能够同时执行多个任务的系统的艺术可以说是处理同时执行。例如,超线程也被称为"SMT",同时多线程,因为它处理两个线程同时在一个核上运行两个线程的完整上下文(这是Intels的方法,AMD有一个稍微不同的解决方案,参见- Difference between intel and AMD multithreading)。
并发性是一个术语,位于更高的抽象级别上,与OS世界有关。它是执行环境的一个属性,在这个属性中,您可以执行多个任务,而您却无法控制执行这些任务的顺序,甚至无法控制它们的交织形式。如果它们同时在多个核上运行,在SMT的一个核上,甚至在具有某种抢占机制的单线程核上,或者在某些调度算法上,将任务分解成块并在它们之间不断交换,这并不重要。这里最重要的一点是,并发性迫使您设计任务的方式能够保证在任何类型的系统上的正确性(特别是如果它们交互或共享数据),并且具有任何顺序或交织。
如果任务设计正确(有适当的锁定、屏障、信号量和任何保证正确数据流的内容),并且操作系统正确地完成了它的工作(例如,在上下文切换上保存状态,或者在需要时清除缓存和关闭TLB条目),那么它就可以使用任何形式的执行模型“在幕后”运行。
由于您所指的是并行算法,所以正确的术语可能是并发执行。
在这个线程中有很多例子(我不会在这里复制它以避免剽窃:) - What is the difference between concurrency and parallelism?
https://stackoverflow.com/questions/19997613
复制相似问题