python直譯器的資源的申請和釋放都由主線程完成
全域性變數_pyruntimestate中有乙個欄位_finalizing就是標記python直譯器是否正在退出,這個欄位在直譯器初始化時被設定為null
當主線程要退出時(在py_runmain中呼叫py_finalizeex,會開始主線程的退出流程),主線程會將_finalizing設定為自己
其它所有的執行緒在競爭獲取gil時,會首先檢查_finalizing是否被設定了,若被設定,則馬上放棄gil的競爭並退出執行緒
這樣在一段時間後,就只剩下主線程自己了
主線程會完成資源的釋放工作。
要注意的是,py_finalizeex可以在py_runmain外呼叫,其效果是釋放所有python直譯器的資源(而不影響所屬的程序)
這個操作存在的意義在於:一些程序通過加裝python的庫的方式啟動python,此時python並沒有獨立程序,此時python所屬程序就可以通過py_finalizeex釋放python的資源而不影響執行。
執行緒生命週期
今天看到一段這樣的 handle hthread createthread null,0,add,a,0,null hmutext createmutex null,false,l huchiti closehandle hthread 簡單的說,關閉了執行緒控制代碼 關閉了執行緒,其兩者的生命週期...
執行緒生命週期
本章目標 了解執行緒的生命週期 了解執行緒的停止操作 執行緒的生命週期 注意大部分的執行緒生命週期的方法基本上都已經學過了,那麼在這裡有以下三個新方法 suspend 方法 暫時掛起執行緒 resume 方法 恢復掛起的執行緒 stop 方法 停止執行緒 但是對於執行緒中suspend resume...
執行緒生命週期
執行緒的生命週期分為五種狀態 新建狀態 就緒狀態 執行狀態 阻塞狀態 死亡狀態 剛new出來的執行緒物件。新建狀態呼叫start 方法就進入就緒狀態。就緒狀態的執行緒又叫做可執行狀態,表示當前執行緒具有搶奪cpu時間片的權利 cpu時間片就是執行權 當乙個執行緒搶奪到cpu時間片之後就開始執行run...