今天小編分享的科學經驗:Python團隊官宣下線GIL:可選擇性關閉,歡迎閲讀。
鵝妹子嘤!拖累 AI 和 ML 運算的 GIL 鎖終于關!閉!了!
Python 官方宣布,在新版的 CPython 中,GIL 鎖将成為「可選擇項」。
人們終于不必再受到這一限制的困擾了。
這則通告中提到的 colesbury,多年來一直致力于讓 Python 官方把 GIL 移除。
現在這個夢想終于實現了,不僅 Python 官方對他表示了感謝,網友也給他發去了賀電。
GIL 的關閉,意味着此前只能串行的多個線程将可以并行運行。
對于人工智能、機器學習等計算密集型領網域,工作效率将大大提高。
聽聞這一消息,已經用了 20 年、快要把 Python 當成母語的老用户流下了激動的淚水。
LeCun 也發文表示慶祝:再也沒有 GIL 了!
再見了,GIL
根據官方通告顯示,GIL 的下線工作将分為三個階段。
短期之内,出于兼容性等考量,「無 GIL」将作為實驗性功能供用户選擇。
在這一階段(大約是 3.13 版本),Python 團隊也需要進行摸索,可能無法提供社區支持。
同時官方也希望發行商在這一階段不要将 no-GIL 作為默認屬性。
這一過程可能持續 1-2 年時間。
當有足夠的社區支持能力後,GIL 的退出将進入中期階段。
這主要取決于修改後的 API 對舊版本的兼容程度。
這一階段當中,分銷商将開始提供 no-GIL 版本,但不同的包之間可能存在較大差異
而 Python 團隊的長期目标是将 no-GIL 作為默認選項,甚至徹底抹去 GIL 的一切痕迹。
官方對此十分期待,但同時為了确保兼容性,也表示不能操之過急。
官方預計,這一目标可能要等到五年之後實現。
同時官方也表示,如果在此期間發現關閉 GIL 的風險遠大于收益,會進行回滾操作。
不過,也有吃瓜群眾表示,GIL 是個嘛玩意兒?
而且這條的浏覽量在評論區還排上了第二名。
那就讓我們來看看,這把「鎖」,究竟「鎖」住了什麼。
GIL「鎖」住了什麼
GIL 全名為全局解釋器鎖(Global Interpreter Lock)。這是一種線程管理機制,并不根屬于 Python 語言,而是存在于 CPython 中。
Cpython 是由官方推出、用 C 語言實現的 Python 代碼解釋器。
換言之,只要用的 Python 是官方版本,都會受到 GIL 的影響。
在 GIL 鎖開啓的情況下,同個進程内的多個線程只能串行而不能并行。
GIL 的釋放有兩種觸發方式,一種是遇到 I/O 操作,另一種則是超出時間限制。
遇到 I/O 操作時,原線程運行結束,其餘線程對 CPU 使用權進行「競争」。
但如果是超時釋放,原來運行的線程會重新加入這場「競争」。
這種做法是出于安全性考慮,但已經不能适應時代的發展。
根據 GIL 的原理,主要進行 I/O 操作的程式,比如網頁爬蟲,受到的影響并不大。
而對于計算密集型的程式來説,就是另一回事了。
GIL 誕生時的 CPU 還只有一個核心,但在發展的過程中,GIL 始終保持着全局鎖定的特性。
這就導致了在多核 CPU 早已普及的今天,多出的核心并沒有被利用,大量算力被浪費。
這意味着,對于 AI、ML 等計算密集領網域,效率會出現嚴重降低。
AI 發展如火如荼的現在,姗姗來遲的解決方案終于出爐。
不過,就像這位網友所説的,晚一些總比沒有好。
參考鏈接:
[ 1 ] https://discuss.python.org/t/a-steering-council-notice-about-pep-703-making-the-global-interpreter-lock-optional-in-cpython/30474
[ 2 ] https://twitter.com/soumithchintala/status/1685524194144989184
[ 3 ] https://en.wikipedia.org/wiki/Global_interpreter_lock
[ 4 ] https://wiki.python.org/moin/GlobalInterpreterLock