成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Python 有可能刪除 GIL 嗎?

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

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

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

GIL 的起源

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

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

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

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

嘗試消除 GIL

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

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

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

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

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

積重難返

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

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

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

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

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

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

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

最后的話

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

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

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

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品久久久爽爽爽麻豆色哟哟| 精品少妇一区二区| 欧美一区二区三区在线播放 | 日韩一区二区三区免费看| 国产98色在线|日韩| 一区二区三区三区在线| 亚洲福利av| 日韩欧美国产一区二区三区| 亚洲va韩国va欧美va精品| 91色.com| 欧美日韩在线免费视频| 亚洲欧美日韩在线| 成人午夜又粗又硬又大| 色网站国产精品| 亚洲欧洲一区二区三区| 国产a区久久久| 国产亚洲一区二区三区在线播放| 欧美成人video| 日韩高清电影一区| 日韩视频在线观看国产| 久久久蜜臀国产一区二区| 国产一区二区三区在线观看免费视频 | 91在线视频网址| 国产精品日韩| 日韩丝袜情趣美女图片| 一区二区三区国产| 欧美日韩国产精品一卡| 欧美一区二区网站| 无吗不卡中文字幕| 午夜精品亚洲| 欧美一级片在线| 日韩中文字幕区一区有砖一区 | 日本精品裸体写真集在线观看| 午夜精品久久久久久久久| 1024亚洲| 亚洲一区二区三区不卡国产欧美| 北条麻妃一区二区三区| 在线电影欧美成精品| 免费看欧美美女黄的网站| 9久re热视频在线精品| 一区二区三区在线免费观看| 欧美日韩综合另类| 337p日本欧洲亚洲大胆精品| 伊人色综合久久天天人手人婷| 成人黄动漫网站免费app| 色av一区二区| 亚洲成av人片在线观看| 91精品国产色综合久久不卡电影| 综合av第一页| 亚洲毛片播放| 日韩女优电影在线观看| 成人午夜激情影院| 日韩无一区二区| 欧美aa国产视频| 欧美成人官网二区| 欧美二区在线观看| 日韩一区二区在线观看视频播放| 色综合久久久久综合99| 91在线观看地址| 久久婷婷国产综合尤物精品| 亚洲综合色成人| 国产精品91一区二区| 在线视频国内自拍亚洲视频| 美女视频黄久久| 色悠悠亚洲一区二区| 日韩精品欧美精品| 国产盗摄视频一区二区三区| 国产成人精品免费在线| 国产精品天美传媒| 亚洲私人影院| 国产成人自拍网| 午夜精品久久久久久不卡8050 | 99久久婷婷国产综合精品电影| 亚洲精品日本| 在线观看91视频| 国产酒店精品激情| 日韩毛片精品高清免费| 制服丝袜亚洲精品中文字幕| 亚洲成人资源| 亚洲区国产区| 国产精品亚洲а∨天堂免在线| 亚洲国产精品一区二区第一页| 亚洲欧洲成人av每日更新| 久久精品国产网站| 久久一区二区三区四区| 95精品视频在线| 中文成人综合网| 久久久久久九九九九| 免费不卡在线视频| 777午夜精品视频在线播放| 欧美a级片一区| 中文字幕日韩欧美一区二区三区| 99精品99久久久久久宅男| 精品一区二区三区在线观看国产| 欧美一区日本一区韩国一区| 国产精品亚洲午夜一区二区三区| 欧美激情一区在线观看| 亚洲黄色影片| 亚洲一区二区三区四区不卡| 在线区一区二视频| 麻豆国产一区二区| 国产精品丝袜久久久久久app| 99精品国产高清一区二区| 日本道免费精品一区二区三区| 成人精品小蝌蚪| 亚洲欧洲在线观看av| 色老汉av一区二区三区| 国产成a人亚洲精品| 日本一区二区三区在线观看| 91成人免费电影| 成人av网站在线观看免费| 欧美激情在线观看视频免费| 欧美区视频在线观看| 97久久超碰国产精品电影| 免播放器亚洲| 99re这里都是精品| 亚洲蜜臀av乱码久久精品| 牛夜精品久久久久久久99黑人| 一区二区三区在线免费播放| 欧美视频在线播放| 日韩亚洲一区在线播放| 精品午夜久久福利影院| 久久综合九色综合97婷婷女人 | 成人动漫av在线| 日韩毛片视频在线看| 91精彩视频在线| 伊人激情综合| 卡一卡二国产精品 | 91精品在线观看入口| 亚洲色诱最新| 国产在线国偷精品免费看| 久久久不卡网国产精品二区| 欧美电影一区二区| 亚洲国产婷婷| 国产精品亚洲综合一区在线观看| 日韩毛片视频在线看| 在线不卡免费av| 久久综合久久久| 99国产精品久久久久久久久久| 麻豆精品一区二区| 中文字幕va一区二区三区| 欧美日韩国产一级二级| 亚洲成人资源| 久久精品国产77777蜜臀| 亚洲综合一区二区精品导航| 91精品国产一区二区三区蜜臀| 亚洲一区免费| 成人精品国产福利| 精品在线播放免费| 专区另类欧美日韩| 欧美v日韩v国产v| 久久久久九九九| 国产精品毛片在线看| 成人99免费视频| 国产成人av一区二区三区在线| 一区二区三区精品在线观看| 国产性做久久久久久| 在线影院国内精品| 波多野结衣精品在线| 婷婷国产v国产偷v亚洲高清| 久久综合国产精品| 欧美一区二区三区在线视频| 亚洲区欧美区| 在线成人黄色| 国产成人精品免费在线| 九一九一国产精品| 亚洲欧美日韩综合aⅴ视频| 欧美激情艳妇裸体舞| 欧美一区二区三区视频在线| 欧美日韩亚洲综合| 一本久道久久综合狠狠爱| 影音先锋日韩资源| 99久久777色| 韩国av一区二区三区四区| 午夜成人免费电影| 中文字幕一区二区三区在线不卡| 欧美电影影音先锋| 色哟哟在线观看一区二区三区| 亚洲一区二区三区精品在线观看| 欧美一区二区三区四区夜夜大片| 国产精品综合一区二区| 亚洲成人av一区二区三区| 国产亚洲欧美日韩日本| 亚洲精品一线二线三线无人区| 免费国产自线拍一欧美视频| 久久国产精品久久精品国产| 丝袜美腿高跟呻吟高潮一区| 亚洲不卡av一区二区三区| 中文字幕日韩av资源站| 亚洲视频一二三区| 国产三区在线成人av| 久久免费美女视频| 日韩视频中午一区| 精品美女在线观看| 欧美一区二区播放| 久久午夜电影网| 日韩欧美成人一区| 精品处破学生在线二十三| 777色狠狠一区二区三区| 日韩视频免费观看高清完整版在线观看 |