并行(parallel):指在同一時刻,有多條指令在多個處理器上同時執(zhí)行励幼。所以無論從微觀還是從宏觀來看汰寓,二者都是一起執(zhí)行的。
并發(fā)(concurrency):指在同一時刻只能有一條指令執(zhí)行苹粟,但多個進程指令被快速的輪換執(zhí)行有滑,使得在宏觀上具有多個進程同時執(zhí)行的效果,但在微觀上并不是同時執(zhí)行的嵌削,只是把時間分成若干段毛好,使多個進程快速交替的執(zhí)行。
并行在多處理器系統(tǒng)中存在苛秕,而并發(fā)可以在單處理器和多處理器系統(tǒng)中都存在肌访,并發(fā)能夠在單處理器系統(tǒng)中存在是因為并發(fā)是并行的假象,并行要求程序能夠同時執(zhí)行多個操作想帅,而并發(fā)只是要求程序假裝同時執(zhí)行多個操作(每個小時間片執(zhí)行一個操作场靴,多個操作快速切換執(zhí)行)啡莉。
當(dāng)有多個線程在操作時港准,如果系統(tǒng)只有一個 CPU,則它根本不可能真正同時進行一個以上的線程咧欣,它只能把 CPU 運行時間劃分成若干個時間段浅缸,再將時間段分配給各個線程執(zhí)行,在一個時間段的線程代碼運行時,其它線程處于掛起狀態(tài).這種方式我們稱之為并發(fā)(Concurrent)魄咕。
當(dāng)系統(tǒng)有一個以上 CPU 時衩椒,則線程的操作有可能非并發(fā)。當(dāng)一個 CPU 執(zhí)行一個線程時哮兰,另一個 CPU 可以執(zhí)行另一個線程毛萌,兩個線程互不搶占 CPU 資源,可以同時進行喝滞,這種方式我們稱之為并行(Parallel)阁将。
在IO和網(wǎng)絡(luò)編程中,我們經(jīng)秤以猓看到幾個概念:同步做盅、異步缤削、阻塞、非阻塞吹榴。
同步和異步
同步和異步是針對應(yīng)用程序和內(nèi)核的交互而言的亭敢,同步指的是用戶進程觸發(fā)IO 操作并等待或者輪詢的去查看IO 操作是否就緒,而異步是指用戶進程觸發(fā)IO 操作以后便開始做自己的事情图筹,而當(dāng)IO 操作已經(jīng)完成的時候會得到IO 完成的通知帅刀。
阻塞和非阻塞
阻塞和非阻塞是針對于進程在訪問數(shù)據(jù)的時候,根據(jù)IO操作的就緒狀態(tài)來采取的不同方式远剩,說白了是一種讀取或者寫入操作方法的實現(xiàn)方式劝篷,阻塞方式下讀取或者寫入函數(shù)將一直等待,而非阻塞方式下民宿,讀取或者寫入方法會立即返回一個狀態(tài)值娇妓。
理解方式
乍一看這四個概念的解釋會瞬間感到頭大,也經(jīng)常講同步異步等同于阻塞非阻塞活鹰,其實哈恰,區(qū)分他們非常簡單。
同步異步與阻塞非阻塞的主要區(qū)別是針對對象不同志群。
同步異步是針對調(diào)用者來說的着绷,調(diào)用者發(fā)起一個請求后,一直干等被調(diào)用者的反饋就是同步锌云,不必等去做別的事就是異步荠医。
阻塞非阻塞是針對被調(diào)用者來說的,被調(diào)用者收到一個請求后桑涎,做完請求任務(wù)后才給出反饋就是阻塞彬向,收到請求直接給出反饋再去做任務(wù)就是非阻塞。
舉例理解
在公交站等公交
對調(diào)用者-乘客而言:
1攻冷,一直干望著公交來的方向娃胆,就是同步。
2等曼,不望著公交來的方向里烦,掏出筆記本改bug,聽公交站廣播是否到車禁谦,就是異步胁黑。
對被動用者-公交系統(tǒng)而言:
1,公交站有廣播的就是非阻塞的州泊。
2丧蘸,公交站沒有廣播的就是阻塞的。