全局解釋器鎖或GIL是一個互斥鎖,它阻止多個本機線程同時執(zhí)行Python字節(jié)碼。這個鎖是必需的,主要是因為CPython的內(nèi)存管理不是線程安全的。(然而,由于GIL的存在,其他的特性已經(jīng)發(fā)展到依賴于它所執(zhí)行的保證。)
在CPython的環(huán)境下,即使在多核的情況下,同一個進程啟動多個線程,只能執(zhí)行一個線程。 無法利用多核的一個優(yōu)勢 。
GIL的優(yōu)點:
保證Cpython解釋器內(nèi)存管理的線程安全
GIL的缺點:
同一進程內(nèi)所有的線程同一時刻只能有一個執(zhí)行。
也就是說Cpython解釋器的多線程無法實現(xiàn)并行。
為什么需要GIL :
python中一切都是對象,Cpython中對象的回收,是通過對象的引用計數(shù)來判斷,當(dāng)對象的引用計數(shù)為0時,就會進行垃圾回收,自動釋放內(nèi)存。
但是如果多線程的情況,引用計數(shù)就變成了一個共享的變量 Cpython是當(dāng)下最流行的Python的解釋器,使用引用計數(shù)來管理內(nèi)存,在Python中,一切都是對象,引用計數(shù)就是指向?qū)ο蟮闹羔様?shù),當(dāng)這個數(shù)字變成0,則會進行垃圾回收,自動釋放內(nèi)存。但是問題是Cpython是線程不安全的。
考慮下如果有兩個線程A和B同時引用一個對象obj,這個時候obj的引用計數(shù)為2;A打算撤銷對obj的引用,完成第一步時引用計數(shù)減去1時,這時發(fā)生了線程切換,A掛起等待,還沒執(zhí)行銷毀對象操作。
B進入運行狀態(tài),這個時候B也對obj撤銷引用,并完成引用計數(shù)減1,銷毀對象,這個時候obj的引用數(shù)為0,釋放內(nèi)存。如果此時A重新喚醒,要繼續(xù)銷毀對象,可是這個時候已經(jīng)沒有對象了。所以為了保證不出現(xiàn)數(shù)據(jù)污染,才引入GIL。
CPU密集型:在高CPU利用率的代碼中,此時這種同一時刻只能有一個線程訪問CPU機制會響應(yīng)效率,如高計算類的代碼中。如真遇到這種情況,可以用多進程,不用多線程處理
IO密集型:處理文件、處理web請求、爬取網(wǎng)頁、設(shè)備文件、讀寫數(shù)據(jù)、send、recv,我們遇到的基本都是IO的,很少遇到計算類的東西
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
計數(shù)器
-
多線程技術(shù)
-
python
相關(guān)推薦
氣體絕緣輸電線路(gas-insulated transmission line,GIL)具有傳輸容量大、運行可靠性高、環(huán)境友好的特點,國內(nèi)外尚無特高壓GIL成熟產(chǎn)品和應(yīng)用案例,亟需開展其關(guān)鍵技術(shù)
發(fā)表于 12-15 14:39
?1次下載
GIL : Gas Insulated transmission Line 氣體絕緣輸電線路或 CGIT: Compressed Gas Insulated Transmission line
發(fā)表于 09-10 08:00
?44次下載
哪些因素影響智能鎖價格?-坤坤智能鎖如今,市場上的智能鎖價格從幾百到幾千的都有,為什么相差這么大呢?哪些因素影響智能鎖價格
發(fā)表于 11-21 10:04
?447次閱讀
為什么智能鎖的價格比普通機械鎖高?-諾托智能鎖如今,智能鎖越來越普及化,很多家庭都選擇智能鎖,但是,為什么智能
發(fā)表于 12-03 11:44
?382次閱讀
如今,智能鎖已經(jīng)成為家居必備的產(chǎn)品,是智能家居必不可少的代表性產(chǎn)物。然而,在智能鎖市場上不要單純地追趕智能門鎖潮流,而是細心了解、尋找真正適合自己的智能鎖產(chǎn)品。那么,關(guān)于智能鎖
發(fā)表于 03-30 15:52
?387次閱讀
智能鎖區(qū)別于傳統(tǒng)的機械鎖,傳統(tǒng)的機械門鎖是不需要電池進行驅(qū)動,可以永久使用,不用擔(dān)心電的問題,而智能門鎖因為是電子控制的,很多功能都需要電的支撐,所以
發(fā)表于 04-07 14:30
?9141次閱讀
指紋門禁鎖和指紋鎖怎么區(qū)分?指紋門禁鎖和指紋門鎖有何區(qū)別?在很多時候,普通消費者容易將指紋門禁鎖和指紋門鎖的定義混淆,其實二者是有區(qū)別的,適用范圍和需求也不一樣,在選購產(chǎn)品時,
發(fā)表于 06-11 14:43
?4695次閱讀
隨著科技的發(fā)展,很多需要上鎖的東西都變成了使用指紋鎖。指紋鎖的好處在于它方便,而且不容易被打開。每個人的指紋都是獨一無二的,那么打開指紋鎖的鑰匙也就是獨一無二的了?,F(xiàn)在很多人都會在手機
發(fā)表于 06-15 17:35
?5212次閱讀
7月29日,“萬里長江第一廊”——世界首條特高壓GIL管廊完成工程投運以來首次全面“體檢”,有力保障了今夏用電高峰期華東地區(qū)能源供應(yīng)安全,更好地促進長三角地區(qū)一體化發(fā)展。
發(fā)表于 07-31 11:03
?902次閱讀
就目前的智能鎖產(chǎn)品選擇多樣,對一般家庭來說,在全自動智能鎖和半自動智能鎖之間又該如何選擇呢?其工作原理是什么?兩者之間又各有什么優(yōu)勢和區(qū)別呢
發(fā)表于 08-20 16:19
?8811次閱讀
我是一個Python線程,我的工作就是解釋執(zhí)行程序員編寫的Python代碼。 之所以說是解釋執(zhí)行,是因為Python是高級語言,CPU那家伙不認識Python代碼,需要運行的時候動態(tài)翻譯成CPU指令
發(fā)表于 03-22 10:01
?1330次閱讀
這篇文章我想和你聊一聊,關(guān)于 Redis 分布式鎖的「安全性」問題。 Redis 分布式鎖的話題,很多文章已經(jīng)寫爛了,我為什么還要寫這篇文章呢? 因為我發(fā)現(xiàn)網(wǎng)上 99% 的文章,并沒有把這個問題真正
發(fā)表于 08-10 18:06
?5567次閱讀
如果該提案通過,意味著默認情況下 CPython 不會刪除或關(guān)閉 GIL,也不會讓用戶有選擇地啟用 / 刪除 GIL。因為--without-gil是一個編譯時標(biāo)志,可以在從源代碼構(gòu)建 Python
發(fā)表于 01-13 15:31
?434次閱讀
自旋鎖 自旋鎖與互斥鎖很相似,在訪問共享資源之前對自旋鎖進行上鎖,在訪問完成后釋放自旋鎖(解鎖);事實上,從實現(xiàn)方式上來說,互斥
發(fā)表于 07-21 11:19
?9336次閱讀
保護共享資源不被多個線程同時訪問。它的實現(xiàn)原理主要包括以下幾個方面: 1. 鎖的初始化 互斥鎖在創(chuàng)建時需要進行初始化,通常包括設(shè)置鎖的狀態(tài)為“未鎖定”。在某些實現(xiàn)中,還需要初始化
發(fā)表于 07-10 10:07
?388次閱讀
評論