33 執行緒的建立 驗證執行緒之間資料共享 守護執行緒
今日內容
執行緒理論
什麼是執行緒
執行緒的兩種建立方式(重點)
檢視執行緒的pid
計算密集型和io密集型
執行緒與程序的效率對比
執行緒空間不是隔離的
守護執行緒(**)
鎖(重點)
死鎖現象(重點)
遞迴鎖(重點)
以後用遞迴鎖
子程序不能input
執行緒不需要main
GIL鎖(重點)
今日內容回顧:
執行緒的兩種建立方式:(重點)
一\
From threading import Thread
Def f1(n):
Print(n)
main
T = Thread(target=f1,args=(1,))
T.start()
二\
Class MyThread(Thread):
Def __init__(self,n):
Super().__init__()
Self.n = n
Def run(self):
Pass
Main
T = MyThread(5)
T.start()
程序:資源分配單位
執行緒:cpu執行單位(實體)
執行緒的建立和銷燬的開銷特別小
執行緒之間資源共享,共享的是同一個程序中的資源
資源共享就涉及到資料安全問題,加鎖來解決
From threading import Thread,Lock
Loc = Lock()
T = thread(target=f1,args=(loc,))
Loc.acquire()
程式碼
Loc.release()
鎖:犧牲了效率,保證了資料安全(重點)
死鎖現象:出現在鎖巢狀的時候,雙方互相搶對方已經拿到的鎖,導致雙方互相等待,天長地久永不分離,死鎖現象(重點)
遞迴鎖:解決死鎖現象(重點)
Rlock 首先本身就是個互斥鎖,維護了一個計數器,每次acquire就+1,release就-1,當計數器為0的時候,大家才能搶這個鎖
守護執行緒(**)
守護執行緒:等待所有非守護執行緒的結束才結束
守護程序:主程序程式碼執行結束,守護程序就隨之結束
GIL鎖(重點) : cpython直譯器上的一把互斥鎖
訊號量,事件 瞭解