1.6.2 理解交錯(cuò)并發(fā)、并發(fā)和并行之間的區(qū)別
圖1-15展示了交錯(cuò)并發(fā)(interleaved concurrency)和并發(fā)(concurrency)之間的區(qū)別,其中有兩個(gè)軟件線程,每個(gè)軟件線程執(zhí)行4條指令。在交錯(cuò)并發(fā)的場(chǎng)景中,一次執(zhí)行一個(gè)線程的指令,兩個(gè)線程的指令交錯(cuò)執(zhí)行;但在并發(fā)場(chǎng)景中,兩條指令可以同時(shí)并行地執(zhí)行。設(shè)計(jì)的時(shí)候需要考慮到這兩種情形。并發(fā)要求物理上能夠同時(shí)處理才能進(jìn)行。
并行化代碼可以在很多不同的并發(fā)和交錯(cuò)并發(fā)的場(chǎng)合運(yùn)行,即使是在同樣的硬件配置上執(zhí)行也是如此。因此,并行設(shè)計(jì)的一大挑戰(zhàn)在于要能夠保證:在各種不同順序和交錯(cuò)的情況下執(zhí)行都能夠產(chǎn)生正確的結(jié)果,即保證正確性(correctness)。如果需要按特定順序執(zhí)行,或者要求某些部分的代碼不允許同時(shí)運(yùn)行,那么就必須要保證這些部分的代碼不能夠并發(fā)運(yùn)行。不能因?yàn)檫\(yùn)行了很多次,且每次都產(chǎn)生正確的結(jié)果就認(rèn)為沒有并發(fā)地運(yùn)行。在設(shè)計(jì)并發(fā)和并行化的時(shí)候,必須保證考慮到正確性。
在第2章中,我們會(huì)通過一些代碼示例來更深入地學(xué)習(xí)并發(fā)和并行之間的區(qū)別。