更新時(shí)間:2020-10-07 來(lái)源:黑馬程序員 瀏覽量:
操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù)。例如,計(jì)算機(jī)在同一時(shí)刻既可以使用瀏覽器上網(wǎng),又可以使用酷我播放音樂(lè),還能掛著QQ工具聊天......所有的這些都體現(xiàn)了多任務(wù)運(yùn)行的現(xiàn)象。
現(xiàn)在,多核CPU已經(jīng)很普及了。即使使用過(guò)去的單核CPU,依然能同時(shí)運(yùn)行多個(gè)任務(wù),它是如何辦到的呢?答案是操作系統(tǒng)輪流讓每個(gè)任務(wù)交替執(zhí)行。例如,任務(wù)1執(zhí)行0.01秒以后,再切換到任務(wù)2執(zhí)行0.01秒......以此重復(fù)執(zhí)行下去,原理如圖1所示。由于CPU運(yùn)行的速度實(shí)在太快了,任務(wù)切換的速度我們的肉眼根本感知不到,所以從表面上來(lái)看,所有的任務(wù)是在同時(shí)運(yùn)行的。
圖1中要執(zhí)行的任務(wù)有QQ、微信、郵箱、谷歌、酷我等,由于單核CPU每個(gè)時(shí)間點(diǎn)只能運(yùn)行一個(gè)任務(wù),所以按照時(shí)間片輪轉(zhuǎn)的方式(即任務(wù)切換一遍后又重復(fù)切換),讓每個(gè)任務(wù)執(zhí)行2us(舉例值)的時(shí)間,從而形成多個(gè)任務(wù)同時(shí)運(yùn)行的假象。
實(shí)際上真正地并行執(zhí)行多個(gè)任務(wù),只能在多核CPU上完成。不過(guò),計(jì)算機(jī)要執(zhí)行的任務(wù)數(shù)量非常龐大,遠(yuǎn)遠(yuǎn)大于CPU內(nèi)核的數(shù)量,所以操作系統(tǒng)也會(huì)自動(dòng)把任務(wù)輪流調(diào)度到每個(gè)核心上執(zhí)行。接下來(lái),使用一張圖來(lái)分析多核CPU調(diào)度任務(wù)的原理,如圖2所示。
圖2中,雙核CPU相當(dāng)于計(jì)算機(jī)有兩個(gè)單核,每個(gè)單核負(fù)責(zé)執(zhí)行一個(gè)任務(wù),這樣就能同時(shí)執(zhí)行兩個(gè)任務(wù)。當(dāng)這一批的任務(wù)運(yùn)行一段時(shí)間(2us)以后,會(huì)再分配另外一批任務(wù)繼續(xù)運(yùn)行,這樣就真正地形成了多任務(wù)的同時(shí)運(yùn)行。
上述延伸出兩個(gè)概念:并發(fā)和并行。從宏觀角度上來(lái)講,兩者都能夠同時(shí)處理多個(gè)任務(wù),但是兩者又有區(qū)別。并行是指兩個(gè)或者多個(gè)任務(wù)在同一時(shí)刻發(fā)生,而并發(fā)是指兩個(gè)或者多個(gè)任務(wù)在同一時(shí)間間隔內(nèi)發(fā)生。比如在某個(gè)時(shí)間段中,有若干個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間的狀態(tài),某個(gè)時(shí)刻只能有一個(gè)程序運(yùn)行,這種現(xiàn)象就是并發(fā)。
這里面的“同時(shí)”、“并發(fā)”只是一種宏觀上的感受,實(shí)際上從微觀層面看只是進(jìn)程/線程的輪換執(zhí)行,由于切換的時(shí)間非常短,所以產(chǎn)生了一起執(zhí)行的感覺(jué)。
猜你喜歡:
Python培訓(xùn)課程