全局解釋器鎖或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的,很少遇到計算類的東西
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
相關推薦
氣體絕緣輸電線路(gas-insulated transmission line,GIL)具有傳輸容量大、運行可靠性高、環境友好的特點,國內外尚無特高壓GIL成熟產品和應用案例,亟需開展其關鍵技術
發表于 12-15 14:39
?1次下載
GIL : Gas Insulated transmission Line 氣體絕緣輸電線路或 CGIT: Compressed Gas Insulated Transmission line
發表于 09-10 08:00
?44次下載
哪些因素影響智能鎖價格?-坤坤智能鎖如今,市場上的智能鎖價格從幾百到幾千的都有,為什么相差這么大呢?哪些因素影響智能鎖價格
發表于 11-21 10:04
?502次閱讀
為什么智能鎖的價格比普通機械鎖高?-諾托智能鎖如今,智能鎖越來越普及化,很多家庭都選擇智能鎖,但是,為什么智能
發表于 12-03 11:44
?417次閱讀
如今,智能鎖已經成為家居必備的產品,是智能家居必不可少的代表性產物。然而,在智能鎖市場上不要單純地追趕智能門鎖潮流,而是細心了解、尋找真正適合自己的智能鎖產品。那么,關于智能鎖
發表于 03-30 15:52
?405次閱讀
智能鎖區別于傳統的機械鎖,傳統的機械門鎖是不需要電池進行驅動,可以永久使用,不用擔心電的問題,而智能門鎖因為是電子控制的,很多功能都需要電的支撐,所以
發表于 04-07 14:30
?9774次閱讀
指紋門禁鎖和指紋鎖怎么區分?指紋門禁鎖和指紋門鎖有何區別?在很多時候,普通消費者容易將指紋門禁鎖和指紋門鎖的定義混淆,其實二者是有區別的,適用范圍和需求也不一樣,在選購產品時,
發表于 06-11 14:43
?4919次閱讀
隨著科技的發展,很多需要上鎖的東西都變成了使用指紋鎖。指紋鎖的好處在于它方便,而且不容易被打開。每個人的指紋都是獨一無二的,那么打開指紋鎖的鑰匙也就是獨一無二的了。現在很多人都會在手機
發表于 06-15 17:35
?5395次閱讀
7月29日,“萬里長江第一廊”——世界首條特高壓GIL管廊完成工程投運以來首次全面“體檢”,有力保障了今夏用電高峰期華東地區能源供應安全,更好地促進長三角地區一體化發展。
發表于 07-31 11:03
?937次閱讀
就目前的智能鎖產品選擇多樣,對一般家庭來說,在全自動智能鎖和半自動智能鎖之間又該如何選擇呢?其工作原理是什么?兩者之間又各有什么優勢和區別呢
發表于 08-20 16:19
?8963次閱讀
我是一個Python線程,我的工作就是解釋執行程序員編寫的Python代碼。 之所以說是解釋執行,是因為Python是高級語言,CPU那家伙不認識Python代碼,需要運行的時候動態翻譯成CPU指令
發表于 03-22 10:01
?1396次閱讀
這篇文章我想和你聊一聊,關于 Redis 分布式鎖的「安全性」問題。 Redis 分布式鎖的話題,很多文章已經寫爛了,我為什么還要寫這篇文章呢? 因為我發現網上 99% 的文章,并沒有把這個問題真正
發表于 08-10 18:06
?5659次閱讀
如果該提案通過,意味著默認情況下 CPython 不會刪除或關閉 GIL,也不會讓用戶有選擇地啟用 / 刪除 GIL。因為--without-gil是一個編譯時標志,可以在從源代碼構建 Python
發表于 01-13 15:31
?495次閱讀
自旋鎖 自旋鎖與互斥鎖很相似,在訪問共享資源之前對自旋鎖進行上鎖,在訪問完成后釋放自旋鎖(解鎖);事實上,從實現方式上來說,互斥
發表于 07-21 11:19
?9551次閱讀
保護共享資源不被多個線程同時訪問。它的實現原理主要包括以下幾個方面: 1. 鎖的初始化 互斥鎖在創建時需要進行初始化,通常包括設置鎖的狀態為“未鎖定”。在某些實現中,還需要初始化
發表于 07-10 10:07
?614次閱讀
評論