并發(fā)和并行這兩個(gè)概念在我的腦子里一直是很混亂,趁著清明節(jié)放假,好好地在網(wǎng)上了解了下,感覺有了點(diǎn)頭緒,特意分享下,如果有了解不對(duì)的地方,還望大家指正。
首先來(lái)看看網(wǎng)上對(duì)并發(fā)和并行比率最多的定義:
并發(fā):指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生
并行:指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生
好了,其實(shí),并發(fā)和并行從宏觀上來(lái)講都是同時(shí)處理多路請(qǐng)求的概念。大家看好這句話,是宏觀里的“同時(shí)”,為什么這么說(shuō)?可以理解為:我們可以將就的認(rèn)為事件在并發(fā)和并行中是在同時(shí)發(fā)生的,但其實(shí)并不是。從微觀上說(shuō),同時(shí)發(fā)生只出現(xiàn)在并行里,并發(fā)只是間斷執(zhí)行。就如同網(wǎng)上的一句話里說(shuō)的:
“并發(fā)”在微觀上不是同時(shí)執(zhí)行的,只是把時(shí)間分成若干段,使多個(gè)進(jìn)程快速交替的執(zhí)行,從宏觀外來(lái)看,好像是這些進(jìn)程都在執(zhí)行
好了,這么看就比較清楚了。其實(shí)以現(xiàn)在單核CPU和多核CPU的例子更能清楚地了解它們的區(qū)別吧。兩個(gè)線程在單核CPU中在某一時(shí)刻只能運(yùn)行一個(gè),兩個(gè)線程的運(yùn)行其實(shí)就是分時(shí)的在CPU中切換的過(guò)程,這其實(shí)就是并發(fā);而出現(xiàn)了多核CPU后,兩個(gè)線程可以在不同的CPU上面真正的同時(shí)運(yùn)行,這就叫并行。當(dāng)然,在多核CPU中,并發(fā)也是普遍存在的。
下面這張圖應(yīng)該可以簡(jiǎn)單地描述下他們的區(qū)別:
那好,理論知識(shí)其實(shí)就這么多,但是并發(fā)和并行用在其他方面都會(huì)有一些變化,或者偏離了本身的定義。所以在使用中也要注意區(qū)分,比如和我們相關(guān)的網(wǎng)絡(luò)服務(wù)器的并發(fā)概念:
在服務(wù)器上,并發(fā)是指同一時(shí)刻能處理的連接數(shù)
在同一時(shí)刻,服務(wù)器上能建立或維護(hù)多少個(gè)TCP連接,服務(wù)器的并發(fā)量就是多少。當(dāng)然,我們其實(shí)并不關(guān)心他們都在干什么,因?yàn)樗麄兊恼?qǐng)求各不相同。所以,在做服務(wù)器的性能測(cè)試時(shí),并不能只關(guān)心某一個(gè)接口的并發(fā)數(shù),而是要綜合考慮各個(gè)接口的權(quán)重并制定計(jì)劃,才能獲得最接近真實(shí)的性能數(shù)據(jù)。