最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 線程的五個(gè)狀態(tài)

 更新時(shí)間:2020年09月22日 10:41:25   作者:小名叫小明  
這篇文章主要介紹了python 線程的五個(gè)狀態(tài),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

當(dāng)程序中包含多個(gè)線程時(shí),CPU 不是一直被特定的線程霸占,而是輪流執(zhí)行各個(gè)線程。

那么,CPU 在輪換執(zhí)行線程的過(guò)程中,即從創(chuàng)建到消亡的整個(gè)過(guò)程,可能會(huì)歷經(jīng) 5 種狀態(tài),分別是新建、就緒、運(yùn)行、阻塞和死亡。

線程的新建狀態(tài)

無(wú)論是通過(guò) Thread 類直接實(shí)例化對(duì)象創(chuàng)建線程,還是通過(guò)繼承自 Thread 類的子類實(shí)例化創(chuàng)建線程,新創(chuàng)建的線程在調(diào)用 start() 方法之前,不會(huì)得到執(zhí)行,此階段的線程就處于新建狀態(tài)。

線程的就緒狀態(tài)

當(dāng)位于新建狀態(tài)的線程調(diào)用 start() 方法后,該線程就轉(zhuǎn)換到就緒狀態(tài)。

所謂就緒,就是告訴 CPU,該線程已經(jīng)可以執(zhí)行了,但是具體什么時(shí)候執(zhí)行,取決于 CPU 什么時(shí)候調(diào)度它。

換句話說(shuō),如果一個(gè)線程處于就緒狀態(tài),只能說(shuō)明此線程已經(jīng)做好了準(zhǔn)備,隨時(shí)等待 CPU 調(diào)度執(zhí)行,并不是說(shuō)執(zhí)行了 start() 方法此線程就會(huì)立即被執(zhí)行。

線程的運(yùn)行狀態(tài)

當(dāng)位于就緒狀態(tài)的線程得到了 CPU,并開(kāi)始執(zhí)行 target 參數(shù)執(zhí)行的目標(biāo)函數(shù)或者 run() 方法,就表明當(dāng)前線程處于運(yùn)行狀態(tài)。

但如果當(dāng)前有多個(gè)線程處于就緒狀態(tài)(等待 CPU 調(diào)度)時(shí),處于運(yùn)行狀態(tài)的線程將無(wú)法一直霸占 CPU 資源,為了使其它線程也有執(zhí)行的機(jī)會(huì),CPU 會(huì)在一定時(shí)間內(nèi)強(qiáng)制當(dāng)前運(yùn)行的線程讓出 CPU 資源,以供其他線程使用。

線程的阻塞狀態(tài)

當(dāng) CPU 對(duì)多個(gè)線程進(jìn)行調(diào)度時(shí),對(duì)于獲得 CPU 調(diào)度卻沒(méi)有執(zhí)行完畢的線程,就會(huì)進(jìn)入阻塞狀態(tài)。

目前幾乎所有的桌面和服務(wù)器操作系統(tǒng),都采用的是搶占式優(yōu)先級(jí)調(diào)度策略。即 CPU 會(huì)給每一個(gè)就緒線程一段固定時(shí)間來(lái)處理任務(wù),當(dāng)該時(shí)間用完后,系統(tǒng)就會(huì)阻止該線程繼續(xù)使用 CPU 資源,讓其他線程獲得執(zhí)行的機(jī)會(huì)。

對(duì)于具體選擇那個(gè)線程上 CPU,不同的平臺(tái)采用不同的算法,比如先進(jìn)先出算法(FIFO)、時(shí)間片輪轉(zhuǎn)算法、優(yōu)先級(jí)算法等,每種算法各有優(yōu)缺點(diǎn),適用于不同的場(chǎng)景。

除此之外,如果處于運(yùn)行狀態(tài)的線程發(fā)生如下幾種情況,也將會(huì)由運(yùn)行狀態(tài)轉(zhuǎn)到阻塞狀態(tài):

  1. 線程調(diào)用了 sleep() 方法;
  2. 線程等待接收用戶輸入的數(shù)據(jù);
  3. 線程試圖獲取某個(gè)對(duì)象的同步鎖時(shí),如果該鎖被其他線程所持有,則當(dāng)前線程進(jìn)入阻塞狀態(tài);
  4. 線程調(diào)用 wait() 方法,等待特定條件的滿足。

以上幾種情況都會(huì)導(dǎo)致線程阻塞,只有解決了線程遇到的問(wèn)題之后,該線程才會(huì)由阻塞狀態(tài)轉(zhuǎn)到就緒狀態(tài),繼續(xù)等待 CPU 調(diào)度。

以上 4 種可能發(fā)生線程阻塞的情況,解決措施分別如下:

  1. sleep() 方法規(guī)定的時(shí)間已過(guò);
  2. 線程接收到了用戶輸入的數(shù)據(jù);
  3. 其他線程釋放了該同步鎖,并由該線程獲得;
  4. 調(diào)用 set() 方法發(fā)出通知。

線程死亡狀態(tài)

對(duì)于獲得 CPU 調(diào)度卻未執(zhí)行完畢的線程,它會(huì)轉(zhuǎn)入阻塞狀態(tài),待條件成熟之后繼續(xù)轉(zhuǎn)入就緒狀態(tài),重復(fù)爭(zhēng)取 CPU 資源,直到其執(zhí)行結(jié)束。

執(zhí)行結(jié)束的線程將處于死亡狀態(tài)。

線程執(zhí)行結(jié)束,除了正常執(zhí)行結(jié)束外,如果程序執(zhí)行過(guò)程發(fā)生異常(Exception)或者錯(cuò)誤(Error),線程也會(huì)進(jìn)入死亡狀態(tài)。

對(duì)于處于死亡狀態(tài)的線程,有以下 2 點(diǎn)需要注意:

  • 主線程死亡,并不意味著所有線程全部死亡。也就是說(shuō),主線程的死亡,不會(huì)影響子線程繼續(xù)執(zhí)行;反之也是如此。
  • 對(duì)于死亡的線程,無(wú)法再調(diào)用 start() 方法使其重新啟動(dòng),否則 Python 解釋器將拋出 RuntimeError 異常。

以上就是python 線程的五個(gè)狀態(tài)的詳細(xì)內(nèi)容,更多關(guān)于python 線程狀態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyTorch中torch.nn.functional.cosine_similarity使用詳解

    PyTorch中torch.nn.functional.cosine_similarity使用詳解

    在pytorch中可以使用torch.cosine_similarity函數(shù)對(duì)兩個(gè)向量或者張量計(jì)算余弦相似度,這篇文章主要給大家介紹了關(guān)于PyTorch中torch.nn.functional.cosine_similarity使用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python項(xiàng)目目錄找不到.git文件怎么刪除

    Python項(xiàng)目目錄找不到.git文件怎么刪除

    這篇文章主要介紹了Python項(xiàng)目目錄找不到.git文件怎么刪除的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python 正則表達(dá)式入門(中級(jí)篇)

    Python 正則表達(dá)式入門(中級(jí)篇)

    本文主要介紹子表達(dá)式,向前向后查找,回溯引用,有需要的朋友可以看下,希望對(duì)大家有所幫助
    2016-12-12
  • Python3訪問(wèn)MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟

    Python3訪問(wèn)MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟

    要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的IM(即時(shí)通訊)系統(tǒng),支持用戶注冊(cè)、登錄和聊天記錄存儲(chǔ),你可以使用Python和mysql數(shù)據(jù)庫(kù),以下是一個(gè)基本的實(shí)現(xiàn)步驟,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • python中的os.mkdir和os.makedirs的使用區(qū)別及如何查看某個(gè)模塊中的某些字母開(kāi)頭的屬性方法

    python中的os.mkdir和os.makedirs的使用區(qū)別及如何查看某個(gè)模塊中的某些字母開(kāi)頭的屬性方法

    這篇文章主要介紹了python中的os.mkdir和os.makedirs的使用區(qū)別及如何查看某個(gè)模塊中的某些字母開(kāi)頭的屬性方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python裝飾器使用方法全面梳理

    Python裝飾器使用方法全面梳理

    這篇文章主要介紹了Python @property裝飾器的用法,在Python中,可以通過(guò)@property裝飾器將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性,下面文章圍繞主題展開(kāi)更多相關(guān)詳情,感興趣的小伙伴可以參考一下
    2023-01-01
  • Python中性能分析利器pyinstrument詳細(xì)講解

    Python中性能分析利器pyinstrument詳細(xì)講解

    大家好,本篇文章主要講的是Python中性能分析利器pyinstrument詳細(xì)講解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python連接MySQL數(shù)據(jù)庫(kù)的四種方法

    Python連接MySQL數(shù)據(jù)庫(kù)的四種方法

    用?Python?連接到?MySQL?數(shù)據(jù)庫(kù)的方法不是很系統(tǒng),實(shí)際中有幾種不同的連接方法,而且不是所有的方法都能與不同的操作系統(tǒng)很好地配合,本文涵蓋了四種方法,你可以用它們來(lái)連接你的Python應(yīng)用程序和MySQL,需要的朋友可以參考下
    2024-08-08
  • Python使用Selenium執(zhí)行JavaScript代碼的步驟詳解

    Python使用Selenium執(zhí)行JavaScript代碼的步驟詳解

    Selenium是一個(gè)用于自動(dòng)化瀏覽器操作的工具,可以模擬人工操作,執(zhí)行各種瀏覽器操作,而JavaScript是一種常用的腳本語(yǔ)言,本文將介紹如何在Python中使用Selenium執(zhí)行JavaScript代碼,并給出一些常見(jiàn)的應(yīng)用示例
    2023-11-11
  • python3獲取當(dāng)前目錄的實(shí)現(xiàn)方法

    python3獲取當(dāng)前目錄的實(shí)現(xiàn)方法

    這篇文章主要介紹了python3獲取當(dāng)前目錄的實(shí)現(xiàn)方法,文中給大家提到了python3獲取當(dāng)前目錄和上級(jí)目錄的方法,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

郧西县| 南漳县| 青浦区| 山丹县| 岱山县| 南丹县| 邵阳市| 鹿邑县| 成安县| 锦州市| 阳城县| 沭阳县| 北安市| 金华市| 遂平县| 红河县| 曲周县| 麟游县| 景洪市| 阳朔县| 内黄县| 临汾市| 白玉县| 龙门县| 繁峙县| 昌都县| 铜陵市| 大厂| 乌兰县| 体育| 新和县| 咸丰县| 文安县| 康乐县| 吉首市| 三河市| 南雄市| 行唐县| 平原县| 汉中市| 赫章县|