Python 新提案:刪除全局解釋器鎖 GIL,解放多線程性能
據 Python 基金會博客介紹,開發者 Sam Gross 在 2022 Python 語言峰會上帶來了一個新提案:完全移除 CPython 解釋器的 GIL- 全局解釋器鎖,使 Python 程序獲得更快的性能 —— 尤其是多線程程序。
Python 有多個版本,包括 JVM 、 .NET CLR 解釋器以及編譯器,但該語言的核心實現仍是 CPython 解釋器。由于 CPython 的內存管理非線程安全,因此設計了 CPython 的 GIL (Global Interpreter Lock - 全局解釋器鎖),以防止競爭條件并確保線程安全。 GIL 是一個互斥鎖,只允許一個線程持有 Python 解釋器的控制權,從而保護對 Python 對象的訪問,防止多個線程同時執行 Python 字節碼。
但事后看來,GIL 并不理想,因為它阻止了多線程的 CPython 程序充分利用多核處理器的性能。但由于 GIL 長期存在,許多官方和非官方 Python 包和模塊都深度融合了 GIL 模塊,移除 GIL 功能的工作變得任重而道遠。此前,開發者 Larry Hastings 在其 “Gilectomy” (GIL 切除手術)項目中試圖完成 CPython GIL 功能的移除,但該項目失敗了,因為它使單線程 Python 代碼顯著變慢。
而此次 Python 語言峰會帶來了另外一個項目 “nogil”,該項目由 Meta 開發人員 Sam Gross 主持,從項目名稱不難看出,這也是一個專注于移除 GIL 的項目。參考了 Gilectomy 項目的失敗經驗, Sam Gross 意識到 :如果要使 Python 在沒有 GIL 的情況下有效工作,則需要添加新的鎖,以確保它仍然是線程安全的。然而,向現有代碼添加新鎖可能非常困難,因為新的鎖可能會導致在部分領域的性能大幅下降。
據 Python 基金會的介紹,Gross 將發明一種新型鎖,一種 “更吉利” 的鎖。如果順利的話,這個新鎖很可能在 Python 3.12 版本亮相,因為 Gross 的提案就是 “在 Python 3.12 中引入一個新的編譯器標志,該標志將禁用 GIL?!?/p>
本文轉自OSCHINA
本文標題:Python 新提案:刪除全局解釋器鎖 GIL,解放多線程性能
本文地址:https://www.oschina.net/news/196247/remove-gil-from-cpython


2009-10-16 10:20:37




