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


2009-10-16 10:20:37




