现在我正在研究并行计算和算法我对术语 concurrent execution
有点困惑和 simultaneous execution
.
这些术语有什么区别?我们什么时候必须使用concurrent
我们什么时候必须使用 simultaneous
在并行计算中?
最佳答案
同时执行是指利用多个资源(内核、硬件线程等)同时执行多个任务。任务不必以任何方式交互,例如,您可能有两个不同的应用程序同时运行在两个不同的内核上,或者在同一个内核上。
设计能够同时执行多个任务的系统的艺术可以说是处理同时执行。超线程,例如也称为“SMT”,同步多线程,因为它处理在单个内核上同时运行具有完整上下文的两个线程的能力(这是英特尔的方法,AMD 的解决方案略有不同,请参阅- Difference between intel and AMD multithreading )
并发是一个位于更高抽象级别的术语,与操作系统世界相关。它是您的执行环境的一个属性,您可以在其中随时间执行多个任务,而您无法控制执行它们的顺序甚至交错形式。它们是否同时在多个内核上运行、在一个带有 SMT 的内核上运行、甚至在具有某种抢占机制和某种将任务分成块并在它们之间不断交换的调度算法的单线程内核上运行都没有关系。这里重要的一点是,并发迫使你以一种保证正确性的方式来设计你的任务(尤其是当它们交互或共享数据时)在任何类型的系统上以任何顺序或交错。
如果任务设计正确(具有适当的锁定、屏障、信号量和任何保证正确数据流的东西)并且操作系统正常工作(例如在上下文切换时保存状态或清除缓存并在需要时关闭 TLB 条目),那么它可以在任何形式的“幕后”执行模型下运行。
由于您指的是并行算法,因此对您来说合适的术语可能是并发执行。
该线程中有相当多的示例(带有指向源的附加链接 - 我不会在这里复制它以避免抄袭:) - What is the difference between concurrency and parallelism?
关于parallel-processing - 并发和同时的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997613/