0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python新提案:使全局解釋器鎖成為可選項(xiàng)

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2023-01-13 15:31 ? 次閱讀

去年的 2022 Python 語(yǔ)言峰會(huì)上,開發(fā)者 Sam Gross 帶來了新提案:刪除全局解釋器鎖 GIL,解放多線程性能。但由于 GIL 歷史悠久,許多官方 / 非官方的 Python 包和模塊都深度融合了 GIL 模塊,徹底移除 GIL 功能可能會(huì)對(duì)生態(tài)造成影響。在 2023 年 1 月 9 日, Sam Gross 又創(chuàng)建了另一個(gè) Python 提案 PEP 703:使全局解釋器鎖成為構(gòu)建 Python 的可選項(xiàng)。

f52bcf44-9299-11ed-bfe3-dac502259ad0.png

CPython 的全局解釋器鎖(“GIL”)防止多個(gè)線程同時(shí)執(zhí)行 Python 代碼,GIL 是 Python 有效使用多核 CPU 的障礙。

向 CPython 添加一個(gè)構(gòu)建配置 ( --without-gil) ,使其可在沒有全局解釋器鎖的情況下運(yùn)行 Python 代碼,并進(jìn)行必要的更改,以使解釋器線程安全。

這條 PEP 提案的內(nèi)容可謂是論文級(jí)別。提案中先闡述了 GIL 對(duì) Python 并發(fā)的性能阻礙,隨后詳細(xì)分析了抽離 GIL 需要對(duì) Python 內(nèi)部進(jìn)行哪些改動(dòng):

移除全局解釋器鎖需要對(duì) CPython 內(nèi)部進(jìn)行大量更改,但對(duì)公共 Python 和 C API 的更改相對(duì)較少。

實(shí)施的變更大約分為以下四類:

引用計(jì)數(shù)、內(nèi)存管理、容器線程安全、鎖和 atomic API

由于該提案內(nèi)容實(shí)在太多,感興趣的朋友請(qǐng)?jiān)?PEP 703 詳情頁(yè)(https://peps.python.org/pep-0703)和 Cpython 核心開發(fā)者對(duì)該提案的討論帖(https://discuss.python.org/t/pep-703-making-the-global-interpreter-lock-optional/22606/10)中細(xì)閱。

目前此 PEP 已經(jīng)有了參考實(shí)現(xiàn),它的原型源于當(dāng)初為了移除 GIL 而開發(fā)的 nogil 項(xiàng)目,該原型對(duì)單線程代碼帶來較明顯 (~10%) 性能提升。

如果該提案通過,意味著默認(rèn)情況下 CPython 不會(huì)刪除或關(guān)閉 GIL,也不會(huì)讓用戶有選擇地啟用 / 刪除 GIL。因?yàn)?-without-gil是一個(gè)編譯時(shí)標(biāo)志,可以在從源代碼構(gòu)建 Python 解釋器時(shí)進(jìn)行設(shè)置。但如果棄用該配置,會(huì)導(dǎo)致對(duì)解釋器的構(gòu)建和運(yùn)行方式的深度侵入性更改,PEP 中也對(duì)此進(jìn)行了詳細(xì)介紹。

對(duì)用戶側(cè)來說,該改動(dòng)意味著如果用戶使用任何帶有編譯擴(kuò)展的包,將需要獲取或構(gòu)建一個(gè)專門針對(duì) Python 解釋器的(不同的)ABI 編譯的版本,該版本在沒有 GIL 的情況下編譯。

關(guān)于 Python GIL

由于 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 程序充分利用多核處理器的性能。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84081
  • 解釋器
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    6468

原文標(biāo)題:Python新提案:使全局解釋器鎖成為可選項(xiàng)

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    手機(jī)存儲(chǔ)不夠用,“軟NAS”成為新的可選項(xiàng)

    無(wú)論是硬件級(jí)的NAS解決方案亦或是便捷的網(wǎng)盤服務(wù),核心都是為了能夠解決日益膨脹的個(gè)人數(shù)據(jù)存儲(chǔ)需求,而魯大師AiNAS這樣的“軟NAS”出現(xiàn),為用戶提供了多一種選擇。同時(shí)對(duì)于云盤服務(wù)供應(yīng)商來說,也有了新的競(jìng)爭(zhēng)壓力,靠“限速賣會(huì)員”躺著賺錢的時(shí)代,似乎已經(jīng)過去了。
    的頭像 發(fā)表于 07-17 11:36 ?271次閱讀
    手機(jī)存儲(chǔ)不夠用,“軟NAS”<b class='flag-5'>成為</b>新的<b class='flag-5'>可選項(xiàng)</b>

    鴻蒙開發(fā)接口安全:【@system.cipher (加密算法)】

    加密類型,可選項(xiàng)有: 1.?encrypt?加密 2.?decrypt?解密
    的頭像 發(fā)表于 06-06 09:11 ?791次閱讀
    鴻蒙開發(fā)接口安全:【@system.cipher (加密算法)】

    pycharm怎么配置python環(huán)境變量

    Python 解釋。全局配置適用于所有的項(xiàng)目,而項(xiàng)目級(jí)別配置僅適用于單個(gè)項(xiàng)目。我們將分別介紹這兩種配置方式。 在配置 Python
    的頭像 發(fā)表于 11-29 14:56 ?2238次閱讀

    查看python安裝路徑的方法

    Python是一種高級(jí)編程語(yǔ)言,常用于開發(fā)Web應(yīng)用、數(shù)據(jù)分析、人工智能等領(lǐng)域。在使用Python進(jìn)行開發(fā)之前,我們需要先安裝Python解釋
    的頭像 發(fā)表于 11-29 14:54 ?2788次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋,可以通過命令行直接運(yùn)行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測(cè)試、嘗試新代碼或進(jìn)行簡(jiǎn)單的任務(wù)。本文將詳
    的頭像 發(fā)表于 11-29 14:36 ?866次閱讀

    運(yùn)行Python程序的幾種常見方法

    方法: 使用Python解釋 Python解釋是運(yùn)行Py
    的頭像 發(fā)表于 11-28 15:32 ?1940次閱讀

    如何運(yùn)行Python程序

    運(yùn)行Python程序非常簡(jiǎn)單。Python是一種解釋型語(yǔ)言,這意味著可以直接通過解釋來執(zhí)行代碼。下面我將詳細(xì)介紹如何運(yùn)行
    的頭像 發(fā)表于 11-24 09:31 ?1006次閱讀

    python代碼寫完后點(diǎn)哪個(gè)運(yùn)行

    當(dāng)你完成了編寫Python代碼后,你可以選擇多種方式來運(yùn)行它。下面是幾種常見的運(yùn)行代碼的方式: Python解釋Python是一種
    的頭像 發(fā)表于 11-24 09:28 ?2845次閱讀

    python怎么運(yùn)行程序

    Python是一種廣泛使用的編程語(yǔ)言,它的簡(jiǎn)易和可讀性使得它成為初學(xué)者和專業(yè)開發(fā)人員的首選。在運(yùn)行Python程序之前,您需要安裝Python解釋
    的頭像 發(fā)表于 11-24 09:25 ?2350次閱讀

    Python自帶的命令窗口

    Python自帶的命令窗口,也稱為Python交互式解釋,是Python編程語(yǔ)言的一個(gè)重要工具,它允許用戶在命令行界面中輸入和執(zhí)行
    的頭像 發(fā)表于 11-22 14:02 ?710次閱讀

    pycharm中python interpreter怎么設(shè)置

    Interpreter"(項(xiàng)目解釋)一欄,點(diǎn)擊該選項(xiàng)。 在右側(cè)的窗口中,你將看到已安裝的Python解釋
    的頭像 發(fā)表于 11-22 11:08 ?2565次閱讀

    Microchip推出具有靈活許可選項(xiàng)的 MPLAB? XC-DSC 編譯, 進(jìn)一步擴(kuò)展開發(fā)生態(tài)系統(tǒng)

    這款新編譯專為 dsPIC? 數(shù)字信號(hào)控制 ( DSC )優(yōu)化設(shè)計(jì),可為實(shí)時(shí)應(yīng)用定制許可選項(xiàng) ? 隨著工業(yè)和自動(dòng)駕駛汽車市場(chǎng)快速發(fā)展,人們對(duì)軟件工具的需求與日俱增,這些工具能夠更快、更高效地進(jìn)行
    發(fā)表于 11-17 17:19 ?668次閱讀

    Python3.10.0的特性介紹

    了! 2. zip新增可選參數(shù):嚴(yán)格模式 zip新增可選參數(shù)strict, 當(dāng)該選項(xiàng)為True時(shí),傳入zip的兩個(gè)可迭代項(xiàng)長(zhǎng)度必須相等
    的頭像 發(fā)表于 10-31 10:43 ?362次閱讀
    <b class='flag-5'>Python</b>3.10.0的特性介紹

    Yapf:一個(gè)格式化 Python 代碼的好幫手

    格式化為符合 PEP8 代碼指南的格式,還能格式化為符合 Google 代碼指南的格式,可選項(xiàng)更多,讓你的代碼更加漂亮。 1.準(zhǔn)備 開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有
    的頭像 發(fā)表于 10-17 11:08 ?633次閱讀
    Yapf:一個(gè)格式化 <b class='flag-5'>Python</b> 代碼的好幫手

    鼎陽(yáng)科技為工程師提供從70MHz到4GHz帶寬的12-bit示波器可選項(xiàng)

    真實(shí)、波形測(cè)量更精準(zhǔn)的優(yōu)點(diǎn)而廣受好評(píng),此次兩款產(chǎn)品的發(fā)布,進(jìn)一步加強(qiáng)了鼎陽(yáng)科技高帶寬高分辨率示波器在業(yè)界的領(lǐng)先地位,為工程師提供了從70MHz到4GHz帶寬的12-bit示波器可選項(xiàng)。 ? 12-bit
    的頭像 發(fā)表于 09-27 09:57 ?869次閱讀