400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎(chǔ)知識(shí)】進(jìn)程和線程

【Python基礎(chǔ)知識(shí)】進(jìn)程和線程

  • 發(fā)布: 優(yōu)就業(yè)it培訓(xùn)
  • 來源:
  • 2023-08-17 14:59:00
  • 閱讀()
  • 分享
  • 手機(jī)端入口

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ù)在后臺(tái)運(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í)的策略,也會(huì)自動(dòng)將很多任務(wù)輪流調(diào)度到每個(gè)核心上運(yùn)行。

2、進(jìn)程與線程

在操作系統(tǒng)中,一個(gè)任務(wù)就是一個(gè)進(jìn)程(Process)。例如,打開一個(gè)瀏覽器就是啟動(dòng)了一個(gè)瀏覽器進(jìn)程,打開一個(gè)播放器就啟動(dòng)了一個(gè)播放器進(jìn)程,打開兩個(gè)Word文檔就啟動(dòng)了兩個(gè)Word進(jìn)程。

有些進(jìn)程可能會(huì)同時(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)行,而對(duì)于用戶而言,看起來就像同時(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)程,即啟動(dòng)多個(gè)進(jìn)程,多個(gè)進(jìn)程可以同時(shí)執(zhí)行多個(gè)任務(wù)(注意,此處每個(gè)進(jìn)程只有一個(gè)線程)。

②多線程,即只啟動(dòng)一個(gè)進(jìn)程,在這個(gè)進(jìn)程中啟動(dòng)多個(gè)線程,這樣多個(gè)線程也可以同時(shí)執(zhí)行多個(gè)任務(wù)。

除此之外,還可以采用混合模式,即先啟動(dòng)多個(gè)進(jìn)程,每個(gè)進(jìn)程再啟動(dòng)多個(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),那么就只能先將視頻播放完再播放音頻,或者先將音頻播放完再播放視頻,這對(duì)用戶而言顯然是不可接受的。

總而言之,多任務(wù)可以由多進(jìn)程完成,也可以由一個(gè)進(jìn)程內(nèi)的多線程完成。如何調(diào)度進(jìn)程和線程,完全由操作系統(tǒng)決定,Python程序自己不能決定什么時(shí)候執(zhí)行,執(zhí)行多長(zhǎng)時(shí)間。多進(jìn)程和多線程的程序涉及同步、數(shù)據(jù)共享等問題,編寫起來比較復(fù)雜。

Python既支持多進(jìn)程,又支持多線程,下面會(huì)介紹編寫這兩種多任務(wù)程序的方法。

文章“【Python基礎(chǔ)知識(shí)】進(jìn)程和線程”已幫助

更多內(nèi)容

>>本文地址:http://nfbqydst.cn/zhuanye/2023/70623.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測(cè)試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營(yíng)銷互聯(lián)網(wǎng)營(yíng)銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營(yíng)全域電商運(yùn)營(yíng)
  • 軟件測(cè)試軟件測(cè)試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)頁設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時(shí)間TIME