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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

線程死亡狀態(tài)

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

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

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

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

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

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

相關(guān)文章

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

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

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

    Python項目目錄找不到.git文件怎么刪除

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

    Python 正則表達式入門(中級篇)

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

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

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

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

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

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

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

    Python中性能分析利器pyinstrument詳細講解

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

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

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

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

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

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

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

最新評論

于田县| 靖西县| 兴国县| 玛纳斯县| 宣汉县| 阜平县| 米泉市| 南宁市| 涡阳县| 揭阳市| 朔州市| 阿合奇县| 邵武市| 荔浦县| 柳林县| 利辛县| 广东省| 吐鲁番市| 河南省| 望城县| 乌什县| 天长市| 汕尾市| 堆龙德庆县| 西峡县| 桐梓县| SHOW| 绥德县| 泾川县| 伊川县| 高碑店市| 海城市| 吉隆县| 常宁市| 固阳县| 谢通门县| 秦安县| 邵阳市| 汽车| 文登市| 增城市|