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