Python代碼的執(zhí)行由Python 虛擬機(jī)(也叫解釋器主循環(huán),CPython版本)來控制,Python 在設(shè)計(jì)之初就考慮到要在解釋器的主循環(huán)中,同時(shí)只有一個(gè)線程在執(zhí)行,即在任意時(shí)刻,只有一個(gè)線程在解釋器中運(yùn)行。對Python 虛擬機(jī)的訪問由全局解釋器鎖(GIL)來控制,正是這個(gè)鎖能保證同一時(shí)刻只有一個(gè)線程在運(yùn)行。
在多線程環(huán)境中,Python 虛擬機(jī)按以下方式執(zhí)行:
1. 設(shè)置GIL
2. 切換到一個(gè)線程去運(yùn)行
3. 運(yùn)行:
a. 指定數(shù)量的字節(jié)碼指令,或者
b. 線程主動(dòng)讓出控制(可以調(diào)用time.sleep(0))
4. 把線程設(shè)置為睡眠狀態(tài)
5. 解鎖GIL
6. 再次重復(fù)以上所有步驟
在調(diào)用外部代碼(如C/C++擴(kuò)展函數(shù))的時(shí)候,GIL 將會(huì)被鎖定,直到這個(gè)函數(shù)結(jié)束為止(由于在這期間沒有Python 的字節(jié)碼被運(yùn)行,所以不會(huì)做線程切換)。
這里主要有2個(gè)問題
1.python 里面的GIl是全局鎖,然后這個(gè)是控制線程的?每個(gè)時(shí)刻只能一個(gè)線程,為啥線程還要上鎖防止競爭呢?這不是矛盾嗎?我有點(diǎn)不太理解,因?yàn)檫@塊我看過很多文章了
2.怎么判斷python里面字節(jié)碼的執(zhí)行過程,我的理解就是一些運(yùn)算操作指令需要字節(jié)碼
謝謝!
CPython將代碼翻譯為python虛擬機(jī)指令。線程從指令集中獲取指令去執(zhí)行。GIL的全局鎖保證了同一時(shí)刻最多只能有一個(gè)線程去指令集獲取指令。為啥線程還要上鎖防止競爭呢? 這是因?yàn)镃Python本身并不是線程安全的,也涉及到垃圾回收的??赡芤粋€(gè)我們認(rèn)為一個(gè)動(dòng)作可能需要多個(gè)指令去完成的, a = {} 在可能要 4~5 個(gè)指令來完成這個(gè)動(dòng)作。
關(guān)于多線程的GIL問題,可以看看這篇關(guān)于源碼上的分析:https://www.hongweipeng.com/i...
python里面字節(jié)碼的執(zhí)行過程問題里寫的虛擬機(jī)運(yùn)行方式是正確的,關(guān)于字節(jié)碼和執(zhí)行過程可以看看:https://www.hongweipeng.com/i... 這是對于一般表達(dá)式的字節(jié)碼和其執(zhí)行過程。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。