1. 程式人生 > >day 33 什麼是執行緒? 兩種建立方式. 守護執行緒. 鎖. 死鎖現象. 遞迴鎖. GIL鎖

day 33 什麼是執行緒? 兩種建立方式. 守護執行緒. 鎖. 死鎖現象. 遞迴鎖. GIL鎖

一.執行緒

      1.程序:資源的分配單位

     執行緒:cpu執行單位(實體)

  2.執行緒的建立和銷燬開銷特別小

  3.執行緒之間資源共享,共享的是同一個程序中的資源

  4.執行緒之間不是隔離的

  5.執行緒可不需要  main

 

二.執行緒的建立方式

  From threading import Thread

  第一種

  

  第二種

  

 

三.守護執行緒

  1.守護執行緒:等待所有非守護執行緒的結束才結束

  2.守護程序:主程式程式碼執行結束,守護程序就隨之結束

注:

  1.主程序在其程式碼結束後就已經算執行完畢了(守護程序在此時就被回收),

    然後主程序會一直等非守護的子程序都執行完畢後

    回收子程序的資源(否則會產生殭屍程序),才會結束,

  2.

主執行緒在其他非守護執行緒執行完畢後才算執行完畢(守護執行緒在此時就被回收)。
因為主執行緒的結束意味著程序的結束,程序整體的資源都將被回收,
而程序必須保證非守護執行緒都執行完畢後才能結束,
因為程序執行結束是要回收資源的,
所有必須確保你裡面的非守護子執行緒全部執行完畢。

 

四、計算密集型和io密集型

  io密集型時 執行緒效率高

  計算密集型  程序效率高

 

 五。鎖  

  1.犧牲效率,保證資料安全

 

  2.死鎖現象

    出現在鎖巢狀的時候,雙方互相搶對方已經拿到的鎖,

    導致雙方互相等待,

  3.遞迴鎖(解決死鎖現象)

  Rlock  首先本身就是個互斥鎖,維護了一個計數器,

  每次acquire就+1,release就-1,當計數器為0的時候,大家才能搶這個鎖

  4. gil鎖  :cpython直譯器上的一把互斥鎖

 

 六.訊號量,事件(同進程一樣)