1. 程式人生 > >GIL與執行緒互斥鎖

GIL與執行緒互斥鎖

1、GIL與執行緒互斥鎖的區別

(1)執行緒互斥鎖是python程式碼層面的鎖,解決了python程式中多執行緒共享資源的問題

(2)GIL是python直譯器層面的鎖,只在CPython直譯器中存在,解決了直譯器中多執行緒競爭資源的問題

2、python的執行緒雖然是真正的執行緒,但直譯器可執行程式碼時,有一個GIL鎖,任何python執行緒執行前,必須先獲取GIL鎖,然後每執行一定位元組碼,直譯器就會釋放GIL鎖,讓其他執行緒有機會執行。

3、GIL對程式的影響

(1)python中同一時刻有且只有一個執行緒執行

(2)python中的多執行緒,由於GIL的存在,無法利用多核CPU

(3)python中多執行緒不適合執行計算密集型程式,計算密集型的任務需要大量計算,消耗cpu資源,如果程式需要進行大量計算,利用多核CPU,可以使用多程序代替多執行緒

4、如何改善GIL?

(1)更換更高版本的直譯器,從3.2開始,對直譯器進行了優化

(2)更換直譯器,因為GIL僅在CPython中存在

(3)python為了解決程式使用多核問題,使用多程序替代了多執行緒