IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
1、多任務(wù)操作系統(tǒng)
Windows、Linux和Mac OS等一些常用的操作系統(tǒng)都是多任務(wù)操作系統(tǒng)。其中,多任務(wù)是指操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù)。例如,用戶使用Windows操作系統(tǒng)可以一邊用瀏覽器上網(wǎng)查閱資料,一邊用音樂播放器聽歌,一邊用PowerPoint制作幻燈片,這就是多任務(wù)。多任務(wù)至少有3個(gè)任務(wù)在操作系統(tǒng)中同時(shí)運(yùn)行,與此同時(shí)還有一些任務(wù)在后臺運(yùn)行著,只是這些任務(wù)沒有顯示在桌面上而已。
基于摩爾定律,近年來CPU技術(shù)得到了飛速地發(fā)展,現(xiàn)在多核CPU已經(jīng)成為計(jì)算機(jī)的“標(biāo)配”。然而,即使在多年前使用單核CPU,Windows操作系統(tǒng)本身就是多任務(wù)操作系統(tǒng)。多任務(wù)操作系統(tǒng)的CPU是順序執(zhí)行代碼的,那么單核CPU執(zhí)行多任務(wù)就需要時(shí)分復(fù)用,即操作系統(tǒng)輪流讓各個(gè)任務(wù)交替執(zhí)行。例如,操作系統(tǒng)中同時(shí)有3個(gè)任務(wù),任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2;任務(wù)2執(zhí)行0.01秒,切換到任務(wù)3;任務(wù)3執(zhí)行0.01秒,切換到任務(wù)1;任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2……這樣反復(fù)循環(huán)執(zhí)行下去。實(shí)際上,在單核CPU中,每個(gè)任務(wù)都是交替執(zhí)行的,但是由于CPU的主頻大多數(shù)以吉赫茲為單位,執(zhí)行速度極快,用戶在使用計(jì)算機(jī)時(shí),是感覺不到時(shí)間間隔的,因此,用戶使用計(jì)算機(jī)時(shí)就像所有任務(wù)都在同時(shí)執(zhí)行一樣。
真正地同時(shí)運(yùn)行多任務(wù)只能在多核CPU上實(shí)現(xiàn),但由于CPU的核心數(shù)量遠(yuǎn)遠(yuǎn)小于任務(wù)的數(shù)量,因此,目前操作系統(tǒng)依舊效仿單核CPU時(shí)的策略,也會自動將很多任務(wù)輪流調(diào)度到每個(gè)核心上運(yùn)行。
2、進(jìn)程與線程
在操作系統(tǒng)中,一個(gè)任務(wù)就是一個(gè)進(jìn)程(Process)。例如,打開一個(gè)瀏覽器就是啟動了一個(gè)瀏覽器進(jìn)程,打開一個(gè)播放器就啟動了一個(gè)播放器進(jìn)程,打開兩個(gè)Word文檔就啟動了兩個(gè)Word進(jìn)程。
有些進(jìn)程可能會同時(shí)做多件事,如Word可以同時(shí)進(jìn)行打字、拼寫檢查、打印等。在一個(gè)進(jìn)程內(nèi)部,多件事需要同時(shí)做,那么多個(gè)子任務(wù)就需要同時(shí)運(yùn)行,這些子任務(wù)稱為線程(Thread)。
一個(gè)進(jìn)程至少有一個(gè)線程,這是因?yàn)橐粋(gè)進(jìn)程至少要做一件事。如上例所述的Word進(jìn)程可以有多個(gè)線程,而且多個(gè)線程可以同時(shí)運(yùn)行。與多進(jìn)程類似,多線程的運(yùn)行方式也是由操作系統(tǒng)在多個(gè)線程之間進(jìn)行快速切換。在操作系統(tǒng)中每個(gè)線程都短暫地交替運(yùn)行,而對于用戶而言,看起來就像同時(shí)在運(yùn)行一樣。當(dāng)然,基于多核CPU能夠真正地同時(shí)運(yùn)行多線程。
3、多進(jìn)程與多線程
前文中編寫的Python程序,都是執(zhí)行單任務(wù)的進(jìn)程,而且只有一個(gè)線程。如果多個(gè)任務(wù)要同時(shí)執(zhí)行怎么辦?實(shí)際中有以下兩種常用的解決方案:
①多進(jìn)程,即啟動多個(gè)進(jìn)程,多個(gè)進(jìn)程可以同時(shí)執(zhí)行多個(gè)任務(wù)(注意,此處每個(gè)進(jìn)程只有一個(gè)線程)。
②多線程,即只啟動一個(gè)進(jìn)程,在這個(gè)進(jìn)程中啟動多個(gè)線程,這樣多個(gè)線程也可以同時(shí)執(zhí)行多個(gè)任務(wù)。
除此之外,還可以采用混合模式,即先啟動多個(gè)進(jìn)程,每個(gè)進(jìn)程再啟動多個(gè)線程。但由于這種模式比以上兩種更復(fù)雜,實(shí)際中很少采用。
執(zhí)行多任務(wù)時(shí),通常各個(gè)任務(wù)之間是有關(guān)聯(lián)的,需要相互通信和協(xié)調(diào)。例如,有多個(gè)任務(wù),任務(wù)1有時(shí)必須暫停等待任務(wù)2完成后才能繼續(xù)執(zhí)行,任務(wù)3和任務(wù)4有時(shí)又不能同時(shí)執(zhí)行,因此,實(shí)現(xiàn)的復(fù)雜度要遠(yuǎn)遠(yuǎn)高于單進(jìn)程單線程的程序。
即使多進(jìn)程或多線程的程序復(fù)雜度高且調(diào)試?yán)щy,但現(xiàn)實(shí)中很多情況都需要設(shè)計(jì)多任務(wù)框架才能解決問題。例如,在手機(jī)上看電影時(shí),播放器進(jìn)程中就必須有一個(gè)線程播放視頻,另一個(gè)線程播放音頻,否則,如果采用單線程來實(shí)現(xiàn),那么就只能先將視頻播放完再播放音頻,或者先將音頻播放完再播放視頻,這對用戶而言顯然是不可接受的。
總而言之,多任務(wù)可以由多進(jìn)程完成,也可以由一個(gè)進(jìn)程內(nèi)的多線程完成。如何調(diào)度進(jìn)程和線程,完全由操作系統(tǒng)決定,Python程序自己不能決定什么時(shí)候執(zhí)行,執(zhí)行多長時(shí)間。多進(jìn)程和多線程的程序涉及同步、數(shù)據(jù)共享等問題,編寫起來比較復(fù)雜。
Python既支持多進(jìn)程,又支持多線程,下面會介紹編寫這兩種多任務(wù)程序的方法。
更多內(nèi)容
>>本文地址:http://www.yiyunku.cn/zhuanye/2023/70623.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?
上一篇 最后一頁