天天看點

GIL鎖(線程)

GIL鎖(線程)

GIL鎖(全局解釋器鎖)(線程)

1.GIL是Python解釋層面的鎖,解決解釋器中多個線程的競争資源問題(多個子線程在系統資源競争是,都在等待對象某個部分資源解除占用狀态,結果誰也不願意先解鎖,然後互相等着,程式無法執行下去)。

2.在Cpython解釋器下,GIL(全局解釋器鎖)導緻了同一程序下的多個線程不能利用多核

因為 GIL 鎖是解釋器層面的鎖,無法去除 GIL 鎖在執行程式時帶來的問題。隻能去改善。

1.更換更高版本的解釋器,比如3.6,從3.2版本開始,據說Python對解釋做了優化

2.更換解釋器,比如JPython,但是由于比較小衆,支援的子產品較少,導緻開發的效率降低

3.Python為了解決程式使用多核的問題,使用多程序代替多線程

GIL:全局解釋器鎖。當我們使用多線程的時候,每一個程序中隻有一個GIL鎖,那麼這多個線程中誰拿到GIL鎖,誰就可以使用cpu(ps:多個程序有多個Gil鎖,但每個程序中隻有一個GIL),是以當python用cpython作為解釋器的時候,多線程就不是真正意義上的多線程,屬于僞并發的多線程。

遇到像 i/o操作這種 會有時間空閑情況 造成cpu閑置的情況會釋放Gil

會有一個專門ticks進行計數 一旦ticks數值達到100這個時候釋放Gil鎖 線程之間開始競争Gil鎖(說明:ticks這個數值可以進行設定來延長或者縮減獲得Gil鎖的線程使用cpu的時間)

1. 線程鎖是fine-grained(細粒度)的鎖,程式員需要自行加/解鎖來保證線程安全;

2. 全局解釋鎖是coarse-grained(粗粒度)的鎖,語言層面本身維護着一個全局的鎖機制用來保證線程安全;

3. 前一種方式比較典型的是 Java, Jython 等, 後一種方式比較典型的是 CPython (即Python)。