Python GIL(全域性直譯器鎖)

阿Hua發表於2020-07-08

理解併發和並行

並行:多個CPU同時執行多個不同的多工。 就像兩個程式(程式),這兩個程式是真的在不同的CPU內同時執行多個任務。

併發:CPU切換處理不同的多工, 還是有兩個程式,但只有一個CPU, 來進行切換處理兩個多工,而不是同時間內執行多工(同一時間內的不同時間執行), 因為CPU切換的時間效率快,所以會讓我們誤認為 同一‘時間’內執行多工。執行的先後順序是由它們進行時間片資源的搶佔。

併發和並行都屬性多工,目的都是提高CPU的執行效率。注意的是:一個CPU不會實現並行的,既一個CPU不可能同時進行執行多個程式的,但是可以在一個隨機時間內進行切換執行(併發)。一個人不可能同時邊說話邊吃飯,只有在時間間隔內才能做到

談談GIL(全域性直譯器鎖)

GIL 稱之為全域性直譯器鎖,是為解決同一時刻內容只有一個執行緒在執行CPU。 比如一個程式內有多個執行緒在執行,一個執行緒在執行python程式時會佔用python直譯器,既前提是加了一把鎖GIL,會使得該程式內的其他執行緒無法執行,只有等待該執行緒結束後,其他執行緒才會執行。 如果執行緒在執行的過程中遇到了耗時操作,則直譯器鎖會自動解開,讓其他執行緒執行。 執行緒在執行的時候也會有先後順序執行,而不是同時進行的。

問題一: 全域性直譯器和互斥鎖的關係
全域性直譯器鎖: 保證同一時刻只有一個執行緒在執行CPU
互斥鎖:互斥鎖是為了解決資源競爭的問題,保證多個執行緒在修改全域性資料,能夠有序的修改資料,保證資料不會修改混亂

問題二:什麼時候會釋放鎖
執行緒在遇到耗時操作,會釋放鎖。

相關文章