全局解釋器鎖或GIL是一個互斥鎖,它阻止多個本機線程同時執行Python字節碼。這個鎖是必需的,主要是因為CPython的內存管理不是線程安全的。(然而,由于GIL的存在,其他的特性已經發展到依賴于它所執行的保證。)
在CPython的環境下,即使在多核的情況下,同一個進程啟動多個線程,只能執行一個線程。 無法利用多核的一個優勢 。
GIL的優點:
保證Cpython解釋器內存管理的線程安全
GIL的缺點:
同一進程內所有的線程同一時刻只能有一個執行。
也就是說Cpython解釋器的多線程無法實現并行。
為什么需要GIL :
python中一切都是對象,Cpython中對象的回收,是通過對象的引用計數來判斷,當對象的引用計數為0時,就會進行垃圾回收,自動釋放內存。
但是如果多線程的情況,引用計數就變成了一個共享的變量 Cpython是當下最流行的Python的解釋器,使用引用計數來管理內存,在Python中,一切都是對象,引用計數就是指向對象的指針數,當這個數字變成0,則會進行垃圾回收,自動釋放內存。但是問題是Cpython是線程不安全的。
考慮下如果有兩個線程A和B同時引用一個對象obj,這個時候obj的引用計數為2;A打算撤銷對obj的引用,完成第一步時引用計數減去1時,這時發生了線程切換,A掛起等待,還沒執行銷毀對象操作。
B進入運行狀態,這個時候B也對obj撤銷引用,并完成引用計數減1,銷毀對象,這個時候obj的引用數為0,釋放內存。如果此時A重新喚醒,要繼續銷毀對象,可是這個時候已經沒有對象了。所以為了保證不出現數據污染,才引入GIL。
CPU密集型:在高CPU利用率的代碼中,此時這種同一時刻只能有一個線程訪問CPU機制會響應效率,如高計算類的代碼中。如真遇到這種情況,可以用多進程,不用多線程處理
IO密集型:處理文件、處理web請求、爬取網頁、設備文件、讀寫數據、send、recv,我們遇到的基本都是IO的,很少遇到計算類的東西
-
計數器
+關注
關注
32文章
2291瀏覽量
96428 -
多線程技術
+關注
關注
0文章
12瀏覽量
8658 -
python
+關注
關注
56文章
4827瀏覽量
86784
發布評論請先 登錄
特高壓交流GIL輸電技術研究及應用

什么是GIL?GIS與GIL的有什么區別?GIL氣體絕緣輸電線路教程免費下載

哪些因素影響智能鎖價格?-坤坤智能鎖
為什么智能鎖的價格比普通機械鎖高?-諾托智能鎖
關于智能鎖需要了解什么呢?
智能鎖的電池怎么換_智能鎖的市場前景
如何區分指紋門禁鎖和指紋鎖
如何設置指紋鎖
世界首條特高壓GIL工廠首次全面“體檢”,保障華東地區能源供應
在全自動智能鎖和半自動智能鎖之間又該如何選擇呢?
GIL在CPython解釋器中的工作原理是什么?

評論