網(wǎng)站建設(shè)幾種語言對比免費(fèi)加精準(zhǔn)客源
作為并發(fā)編程的第一講,比較輕松,我們先來談?wù)勈裁词遣l(fā)和并行。
并發(fā)(Concurrency)是指一個處理器同時處理多個任務(wù)。
并行(Parallelism)是指多個處理器或者是多核的處理器同時處理多個不同的任務(wù)。
并發(fā)是邏輯上的同時發(fā)生(simultaneous),實際是將cpu劃分成不同的時間片交替執(zhí)行多個任務(wù),外界看來就像多個任務(wù)同時執(zhí)行;而并行是物理上的同時發(fā)生。
來個比喻:并發(fā)是一個人同時吃三個饅頭,而并行是三個人同時吃三個饅頭。
并行指在同一時刻,有多條指令在多個處理器上同時執(zhí)行。就好像兩個人各拿一把鐵锨在挖坑,一小時后,每人一個大坑。所以無論從微觀還是從宏觀來看,二者都是一起執(zhí)行的。
并發(fā)(concurrency):指在同一時刻只能有一條指令執(zhí)行,但多個進(jìn)程指令被快速的輪換執(zhí)行,使得在宏觀上具有多個進(jìn)程同時執(zhí)行的效果,但在微觀上并不是同時執(zhí)行的,只是把時間分成若干段,使多個進(jìn)程快速交替的執(zhí)行。這就好像兩個人用同一把鐵锨,輪流挖坑,一小時后,兩個人各挖一個小一點(diǎn)的坑,要想挖兩個大一點(diǎn)的坑,一定會用兩個小時。
并行在多處理器系統(tǒng)中存在,而并發(fā)可以在單處理器和多處理器系統(tǒng)中都存在,并發(fā)能夠在單處理器系統(tǒng)中存在是因為并發(fā)是并行的假象,并行要求程序能夠同時執(zhí)行多個操作,而并發(fā)只是要求程序假裝同時執(zhí)行多個操作(每個小時間片執(zhí)行一個操作,多個操作快速切換執(zhí)行)。
當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時運(yùn)行一個以上的線程,它只能把CPU運(yùn)行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行,在一個時間段的線程代碼運(yùn)行時,其它線程處于掛起狀態(tài)。
當(dāng)系統(tǒng)有一個以上CPU時,則線程的操作有可能非并發(fā)。當(dāng)一個CPU執(zhí)行一個線程時,另一個CPU可以執(zhí)行另一個線程,兩個線程互不搶占CPU資源,可以同時進(jìn)行。