人人妻人人澡人人爽人人精品av_精品乱码一区内射人妻无码_老司机午夜福利视频_精品成品国色天香摄像头_99精品福利国产在线导航_野花社区在线观看视频_大地资源在线影视播放_东北高大肥胖丰满熟女_金门瓶马车内剧烈运动

首頁(yè)>國(guó)內(nèi) > 正文

Python社區(qū)變天:可去除全局解釋器鎖GIL,真正多線程要來(lái)了

2023-07-31 11:18:04來(lái)源:機(jī)器之心

「Python 中的 GIL 將不復(fù)存在,這是人工智能生態(tài)系統(tǒng)領(lǐng)域中的巨大勝利。」PyTorch 核心維護(hù)者 Dmytro Dzhulgakov 感慨道。


【資料圖】

GIL 是什么?GIL 的全稱是 Global Interpreter Lock(全局解釋器鎖),它不是 Python 獨(dú)有的,而是在實(shí)現(xiàn) CPython(Python 解釋器)時(shí)引入的一個(gè)概念。我們可以將 GIL 理解為一個(gè)互斥鎖,用來(lái)保護(hù) Python 里的對(duì)象,防止同一時(shí)刻多個(gè)線程執(zhí)行 Python 的字節(jié)碼,從而確保線程安全。

然而,GIL 存在一個(gè)弊端,即在同一時(shí)刻只能有一個(gè)線程在一個(gè) CPU 上執(zhí)行,無(wú)法將多個(gè)線程映射到多個(gè) CPU 上,使得 Python 并不能實(shí)現(xiàn)真正的多線程并發(fā),從而降低了執(zhí)行效率。

現(xiàn)在,Python 團(tuán)隊(duì)已經(jīng)正式接受了刪除 GIL 的這個(gè)提議,并將其設(shè)置為可選模式,可謂是利好廣大開發(fā)者。

做出這一貢獻(xiàn)的是一位來(lái)自 Meta 的名叫 Sam Gross 的軟件工程師,他花費(fèi)了四年多的時(shí)間才完成這一工程。

在得知這一消息后,大家紛紛叫好,深度學(xué)習(xí)三巨頭之一的 Yann LeCun 發(fā)文祝賀:沒(méi)有了 GIL,現(xiàn)在,Python 代碼可以自由的執(zhí)行多線程了。

「Python 中終于沒(méi)有 GIL 了!」

「這是一個(gè)里程碑式的決定,是編碼社區(qū)所熱切期待的?!?/p>

具體細(xì)節(jié)如何,我們接著看下文。

CPython 核心開發(fā)者 Thomas Wouters 撰文描述了 Python 中的無(wú) GIL 細(xì)節(jié),并對(duì)未來(lái)發(fā)展做了展望。

非常感謝所有人對(duì)無(wú) GIL 提議的反饋,整體上都持積極的支持態(tài)度。指導(dǎo)委員會(huì)打算接受無(wú) GIL 提議,并就以下具體細(xì)節(jié)與大家分享。

我們的基本設(shè)想是:

長(zhǎng)期來(lái)看(大約 5 年以上),no-GIL 構(gòu)建應(yīng)是唯一的構(gòu)建;我們希望非常謹(jǐn)慎地向后兼容。我們不希望出現(xiàn)另一個(gè) Python 3 的情況,所有適應(yīng) no-GIL 構(gòu)建所需的任何第三方代碼更改應(yīng)只適用于 with-GIL 構(gòu)建(盡管仍要解決更老 Python 版本的向后兼容性問(wèn)題)。這不適用于 Python 4。我們?nèi)栽诳紤]對(duì)這兩個(gè)構(gòu)建的 ABI 兼容性和其他細(xì)節(jié)的要求,以及對(duì)向后兼容性的影響;在我們承諾完全轉(zhuǎn)向 no-GIL 之前,需要看到社區(qū)的支持。我們不能只是更改默認(rèn)設(shè)置,更希望社區(qū)弄清自己需要做什么工作來(lái)給予支持。我們核心開發(fā)團(tuán)隊(duì)需要獲得新構(gòu)建模式及相關(guān)所有內(nèi)容的經(jīng)驗(yàn)。我們要整理現(xiàn)有代碼中的線程安全性,因而需要弄明白新的 C API 和 Python API。我們?cè)讷@得這些洞見(jiàn)時(shí)還需要傳達(dá)給 Python 社區(qū)的其他人,并確保自身想要做出的更改以及希望他們做出的更改是可取的;在我們默認(rèn) no-GIL 設(shè)置之前的任何時(shí)候,如果事實(shí)證明了,它的破壞性太大導(dǎo)致收益太少,我們希望能夠改變主意。這也就意味著我們會(huì)回滾所有工作,因此在我們確定要將 no-GIL 設(shè)為默認(rèn)方式之前,特定于 no-GIL 的代碼在某種程度上應(yīng)是可識(shí)別的。

目前,我們認(rèn)為未來(lái)的道路分為以下三個(gè)階段:

短期內(nèi),我們會(huì)將 no-GIL 構(gòu)建作為一種實(shí)驗(yàn)性構(gòu)建模式,大概是在 3.13 版本(也有可能推遲到 3.14 版本)。之所以是實(shí)驗(yàn)性的,是因?yàn)槲覀兒诵拈_發(fā)團(tuán)隊(duì)雖然支持這一構(gòu)建模式,但不期望整個(gè)社區(qū)都會(huì)支持它。我們需要時(shí)間弄清自己要做什么,至少在 API 設(shè)計(jì)以及打包和分發(fā)方面,從而得到社區(qū)的支持。我們也不鼓勵(lì) distributor 將實(shí)驗(yàn)性 no-GIL 構(gòu)建作為默認(rèn)解釋器發(fā)布。中期來(lái)看,在我們確信得到足夠的社區(qū)支持并使 no-GIL 的生產(chǎn)使用可行后,我們將支持 no-GIL 構(gòu)建,但不是默認(rèn)方式,而是在某個(gè)目標(biāo)日期或某個(gè) Python 版本中使它成為默認(rèn)方式。具體的時(shí)間將取決于很多因素,比如 API 更改最終兼容性如何、社區(qū)認(rèn)為他們?nèi)匀恍枰龆嗌俟ぷ鞯?。我們預(yù)計(jì)這至少需要一至兩年的時(shí)間。一旦我們宣布支持,預(yù)計(jì)將有一些 distributor 會(huì)開始默認(rèn)發(fā)布 no-GIL。長(zhǎng)期來(lái)看,我們希望 no-GIL 成為默認(rèn)方式,并刪除 GIL 的所有痕跡(但不會(huì)不必要地破壞向后兼容性)。我們不希望等待太長(zhǎng)時(shí)間,畢竟兩種常用的構(gòu)建模式同時(shí)存在會(huì)給社區(qū)造成很大的負(fù)擔(dān)(比如需要雙倍測(cè)試資源和 debug 場(chǎng)景)。但是我們也不能急于求成。我們認(rèn)為這一過(guò)程將需要花費(fèi)五年的時(shí)間。

當(dāng)然在整個(gè)過(guò)程中,我們整個(gè)開發(fā)團(tuán)隊(duì)將需要實(shí)時(shí)評(píng)估進(jìn)程并對(duì)時(shí)間線進(jìn)行調(diào)整。

關(guān)鍵詞:

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 [email protected]  備案號(hào): 京ICP備2022022245號(hào)-21