日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python 有可能刪除 GIL 嗎?

瀏覽:268日期:2022-06-24 13:03:09

我們知道,在 CPython 中,有一個全局解釋器鎖,英文叫 global interpreter lock,簡稱 GIL,是一個互斥鎖,用來保護 Python 世界里的對象,防止同一時刻多個線程執(zhí)行 Python 的字節(jié)碼,從而確保線程安全,這導致了 Python 的線程無法利用多核 CPU 的優(yōu)勢,因此有人說 Python 的多線程是偽多線程,性能不高,那么 Python 將來有可能去除 GIL 嗎?

要回答這個問題,先從 GIL 的起源進行分析。

GIL 的起源

Python 第一次發(fā)布是在 1991 年,當時的 CPU 都是單核,單核中,多線程主要為了一邊做IO,一邊做 CPU 計算而設計的,Python 編譯器是由 C 語言編寫的,因此也叫 CPython,那時候很多編程語言沒有自動內存管理的功能,為了實現(xiàn)自動垃圾回收,Python 為每一個對象進行了引用計數(shù),當引用計數(shù)為 0 的時候說明該對象可以回收,從而釋放內存了,比如:

>>> import sys>>> data = { ’gzh’: ’Python七號’}>>> var1 = data>>> sys.getrefcount(data)3>>>

這里 data 對象就有 3 個引用, 一個是本身,一個是變量 var1,一個是 getrefcount 函數(shù)的參數(shù),如果此時又有一個線程引用了 data,那么引用計數(shù)再增加 1,如果某個線程使用了 data 后運行結束,那么引用計數(shù)就減少 1,多線程對同一個變量「引用計數(shù)」進行修改,就會遇到 race conditions(競爭),為了避免 race conditions,最簡單有效的辦法就是加一個互斥鎖。

如果對每一個對象都加鎖,有可能引發(fā)另一個問題,就是死鎖,而且頻繁的獲取和釋放會導致性能下降,最簡單有效的方法就是加一個解釋器鎖,線程在執(zhí)行任何字節(jié)碼時都先獲取解釋器鎖,這就避免了死鎖,而且不會有太多的性能消耗。當時 CPU 都是單核,而且這種 GIL 設計簡單,并不會影響性能,因此一直沿用至今天。GIL 存在最主要的原因,就是因為 Python 的內存管理不是線程安全的,這就是 GIL 產生并存在的主要緣由。

嘗試消除 GIL

CPU 進入多核時代后,可以同時做多個計算任務, GIL 才真正變成問題。在 1999 年,有個叫 Greg Stein 的大佬基于 Python 1.5 版本消除了 GIL,取代代之的是在可變數(shù)據(jù)結構上加上更細粒度的鎖,也提交了補丁用于去除對全局可變對象的依賴,然后在標準測試時表明去除 GIL 后單線程比不去除時慢了近 2 倍,測試的機器還是當時性能最好 Windows 機器。也就是說除去了 GIL 后,你使用 2 個 CPU 才能獲取比原來 1 個 CPU 稍微好一點的性能,這種提升明顯得不償失,Greg Stein 的嘗試也就失敗告終。

Python 之父 Guido van Rossum 也歡迎社區(qū)的志愿者去嘗試去除 GIL,只要不降低單線程的性能,但他也提到,去掉 GIL 不是一件容易的事。

Python 開發(fā)者郵件列表中也偶爾會有去除 GIL 的議題,但是以下需求必須滿足:

簡單。從長遠來看該方案必須是可實施、可維護的。 并發(fā)。去除 GIL 必須能提升多線程的性能。 速度。去除 GIL 不能降低單線程的性能。 滿足 CPython 的特性。該方案必須支持 CPython 的功能,比如 __del__ 和弱引用。 API 的兼容性。該方案應與所有現(xiàn)有CPython擴展使用的宏在源方面兼容。 及時銷毀不可達對象,回收內存。 有序銷毀,比如不可達對象 X 引用了 A,那么應該在銷毀 A 之前先銷毀 X(有些垃圾回收算法并不能做到這一點)。

有些需求不容易被滿足,比如 4,5,7,目前,還沒有人滿足以上需求的同時去除 GIL 成功的。

積重難返

這些年 Python 實在太火了,很多優(yōu)秀的庫都是基于 CPython 進行編寫的,很多都是 90 年代的 C 擴展庫,如果要除去 GIL,那么很多基于 GIL 編寫的 C 擴展便無法使用,也就是去了 GIL,Python 生態(tài)有很多擴展或三方庫者無法使用。

還有一個很明顯的例子,Python 解釋器不止有 CPython,還有用 Java 編寫的 Python,.NET 實現(xiàn)的 IronPython,這些解釋器完全沒有 GIL,可是有多少人為它們編寫擴展呢?

Python 之所以如此火爆,與它有著豐富的三方庫開箱即用有著很大的關系,積重難返,去除 GIL 很困難。

為什么 Python3 一開始時不去除 GIL

Python3 在最開始時是有機會實現(xiàn)很多新功能,在此過程中,打破了一些現(xiàn)有的 C 擴展,然后需要更新和移植更改以配合 Python 3,這也是 Python3 一開始不被社區(qū)所接受的原因。

與 Python2 相比,刪除 GIL 將使 Python3 在單線程性能方面更慢,而且很多優(yōu)秀的擴展將不能再使用,如果真的這樣,可以想象 Python3 不可能有未來,最終的結果是 Python3 仍然保持有 GIL。

但 Python3 也為現(xiàn)有的 GIL 帶來了重大改進,在 Python 3.2 版本中,確保了計算密集型線程和 I/O 密集型線程并存時, I/O 密集型長期獲取不到 GIL 而無法執(zhí)行的問題,提升了多線程的性能。

最后的話

Python 因為內存管理不是線程安全的,因此自出生起就自帶 GIL,然后很多擴展都是在 GIL 的保護下編寫的,時間一長積重難反,Python3 一開始也因去除 GIL 導致單線程性能下降的問題而保留 GIL,現(xiàn)在已經是 Python3.9 版本了,將來 Python 去除 GIL 的可能性微乎其微,換句話說,去除 GIL 的 Python 也就不是我們認識的 Python 了。

不過不必沮喪,GIL 影響的也僅僅是多線程執(zhí)行計算密集型的任務罷了,這種場景大多數(shù)程序員都很少遇到,即使有,可以使用多進程來避免 GIL 的影響,或者使用其他編程語言實現(xiàn),任何編程語言或技術都不是十全十美的,發(fā)揮所長是最重要的,即使有 GIL,我也不在乎,也會依然使用 Python。

以上就是Python 有可能刪除 GIL 嗎?的詳細內容,更多關于Python 刪除 GIL 的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
av中文字幕在线观看第一页| 日韩黄色在线观看| 欧美久久一区二区三区| 亚洲精品日本| 日韩国产精品久久久久久亚洲| 亚洲18在线| 欧美日韩1区2区3区| 欧美另类中文字幕| 国产欧美日韩视频在线| 国产亚洲一区二区三区啪| 日韩国产欧美在线播放| 欧美日韩网址| 你懂的网址国产 欧美| 精品一区二区三区四区五区| 久久精品国产久精国产爱| 免费人成黄页网站在线一区二区| 亚洲免费观看高清完整版在线观| 日韩av资源网| 国产精品www.| 日韩精品永久网址| 欧美日韩国产免费观看视频| 天堂成人免费av电影一区| 日韩国产欧美在线视频| 国产精品黄色| 在线看片福利| 亚洲欧美日韩国产一区| 日韩超碰人人爽人人做人人添| 欧美激情91| 久久中文字幕av| 鲁大师影院一区二区三区| 日韩av一区二区三区四区| 国产精品成人一区二区网站软件| 97精品一区二区| 日韩视频一区| 国产一精品一av一免费爽爽| 国产va在线视频| 亚洲激情社区| 国产精品黄网站| 日韩电影免费网站| 日韩精品一二区| 久久国产婷婷国产香蕉| 一区二区精品伦理...| 久久高清免费观看| 久久久91麻豆精品国产一区| 久久蜜桃精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩免费小视频| 免费成人在线视频观看| 国产精品sss在线观看av| 色婷婷狠狠五月综合天色拍| 亚洲精品系列| sm久久捆绑调教精品一区| 天堂av在线一区| 精品成av人一区二区三区| 日韩一级精品| 麻豆精品久久| av不卡在线| 久久精品国产亚洲一区二区三区| 午夜免费一区| 欧美日韩一区自拍| 婷婷丁香综合| 精品视频一区二区三区在线观看| 丝袜国产日韩另类美女| 精品91福利视频| 男人操女人的视频在线观看欧美| 老牛国内精品亚洲成av人片| 三级欧美在线一区| 国产精品成久久久久| 中文在线日韩| 久久久久亚洲| 国产精品美女午夜爽爽| 欧美日韩国产一区精品一区| 国产一区三区在线播放| 日本亚州欧洲精品不卡| 国产资源在线观看入口av| 亚洲有吗中文字幕| 久久男女视频| 国产精品www994| 亚洲色图国产| 色婷婷久久久| 久久精品三级| 日韩欧美中文字幕一区二区三区| 日韩精品免费一区二区在线观看| 国产精选久久| 亚洲三级网址| 欧美精品九九| 日韩欧美午夜| 久久精品免视看国产成人| 日韩精选在线| 久久久夜精品| 国产a久久精品一区二区三区| 日韩中文字幕无砖| 在线亚洲成人| 999国产精品999久久久久久| 久久永久免费| 欧美亚洲色图校园春色| 日韩中文字幕亚洲一区二区va在线| 欧美日中文字幕| 日韩一区二区三区免费播放| 免费观看亚洲天堂| 欧美视频二区| 日本精品久久| 免费在线观看成人| 亚洲欧洲一区| 91精品国产成人观看| 久久精品国产福利| 国产精品视频3p| 国产毛片精品| 日韩福利视频网| 涩涩涩久久久成人精品| 黄色在线一区| 五月婷婷六月综合| 免费欧美一区| 99精品美女| 免费一二一二在线视频| 国产一区二区三区亚洲| 精品美女久久| 丰满少妇一区| 精品国产一区二区三区2021| 日本成人在线视频网站| 亚洲男人在线| 亚洲精品看片| 亚欧成人精品| 青草av.久久免费一区| 日韩一区二区三区精品| 一区二区三区国产盗摄| 亚洲欧美在线专区| 日韩精选在线| 国产日韩免费| 久久99精品久久久久久园产越南| 久久丁香四色| 精品高清久久| 精品国产免费人成网站| 日本精品影院| 亚洲精品在线影院| 亚洲网站视频| 亚洲女同中文字幕| 欧美中文字幕| 中文字幕成人| 国产日本久久| 福利视频一区| 久久久久久久久久久9不雅视频| 天堂资源在线亚洲| 日韩视频二区| 亚洲精品麻豆| 国产精品探花在线观看| 国产91在线播放精品| 日韩福利一区| 激情五月色综合国产精品| 久久精品国产www456c0m| 国产精品88久久久久久| 蜜臀久久99精品久久久久宅男 | 久久中文字幕一区二区| 日韩电影二区| 亚洲一区黄色| 69堂免费精品视频在线播放| 老牛国内精品亚洲成av人片| 日韩久久精品| 日韩专区一卡二卡| 欧美片第1页综合| 日韩成人a**站| 欧美精品资源| 蘑菇福利视频一区播放| 欧美在线看片| 色在线视频观看| 欧美女激情福利| 国产欧美亚洲精品a| av资源亚洲| 亚洲精品第一| 国产aⅴ精品一区二区三区久久 | 欧美亚洲国产激情| 亚洲丝袜美腿一区| 美女久久99| 欧美网站在线| 国产精品视频一区二区三区 | 日韩精品免费视频一区二区三区 | 免费人成网站在线观看欧美高清| 国产精品videosex极品| 亚洲手机在线| 中文字幕日韩欧美精品高清在线| 欧美精品第一区| 亚洲精品97| 久久av免费| 亚洲一区二区动漫| 久久爱www成人| 自拍日韩欧美| 欧美黄页在线免费观看| 免费欧美一区| 国产美女久久| 自拍日韩欧美| 久久伊人久久| 噜噜噜躁狠狠躁狠狠精品视频| 精品国产亚洲一区二区三区| 国产在线成人| 欧美片网站免费| 夜久久久久久| 国产一区二区三区四区五区| 噜噜噜久久亚洲精品国产品小说| 精品视频91| 日韩综合小视频|