基于任务的程序设计(16)

1.6.2  理解交错并发、并发和并行之间的区别

图1-15展示了交错并发(interleaved concurrency)和并发(concurrency)之间的区别,其中有两个软件线程,每个软件线程执行4条指令。在交错并发的场景中,一次执行一个线程的指令,两个线程的指令交错执行;但在并发场景中,两条指令可以同时并行地执行。设计的时候需要考虑到这两种情形。并发要求物理上能够同时处理才能进行。

并行化代码可以在很多不同的并发和交错并发的场合运行,即使是在同样的硬件配置上执行也是如此。因此,并行设计的一大挑战在于要能够保证:在各种不同顺序和交错的情况下执行都能够产生正确的结果,即保证正确性(correctness)。如果需要按特定顺序执行,或者要求某些部分的代码不允许同时运行,那么就必须要保证这些部分的代码不能够并发运行。不能因为运行了很多次,且每次都产生正确的结果就认为没有并发地运行。在设计并发和并行化的时候,必须保证考虑到正确性。

在第2章中,我们会通过一些代码示例来更深入地学习并发和并行之间的区别。 

读书导航