第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python線程全部在單個(gè)內(nèi)核上執(zhí)行

Python線程全部在單個(gè)內(nèi)核上執(zhí)行

阿晨1998 2019-10-11 10:21:34
我有一個(gè)Python程序,該程序產(chǎn)生許多線程,一次運(yùn)行4個(gè),每個(gè)線程執(zhí)行一個(gè)昂貴的操作。偽代碼:for object in list:    t = Thread(target=process, args=(object))    # if fewer than 4 threads are currently running, t.start(). Otherwise, add t to queue但是,當(dāng)程序運(yùn)行時(shí),OS X中的活動(dòng)監(jiān)視器顯示4個(gè)邏輯內(nèi)核中的1個(gè)處于100%的狀態(tài),而其他邏輯內(nèi)核中的接近0個(gè)。顯然,我不能強(qiáng)迫OS做任何事情,但是我從來沒有做過以前請(qǐng)注意這樣的多線程代碼的性能,所以我想知道我是否只是缺少或誤解了某些東西。
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

請(qǐng)注意,在許多情況下(幾乎所有情況下,“昂貴的操作”都是使用Python實(shí)現(xiàn)的計(jì)算),由于Python的全局解釋器鎖定(GIL),多個(gè)線程實(shí)際上不會(huì)并發(fā)運(yùn)行。


GIL是解釋程序級(jí)別的鎖。此鎖定可防止在Python解釋器中一次執(zhí)行多個(gè)線程。每個(gè)要運(yùn)行的線程都必須等待另一個(gè)線程釋放GIL,這意味著您的多線程Python應(yīng)用程序本質(zhì)上是單線程的,對(duì)嗎?是。不完全是。有點(diǎn)。


CPython在幕后使用了所謂的“操作系統(tǒng)”線程,也就是說,每次發(fā)出創(chuàng)建新線程的請(qǐng)求時(shí),解釋器實(shí)際上就會(huì)調(diào)用操作系統(tǒng)的庫和內(nèi)核以生成新線程。例如,這與Java相同。因此,在內(nèi)存中您確實(shí)確實(shí)有多個(gè)線程,并且通常操作系統(tǒng)會(huì)控制計(jì)劃運(yùn)行哪個(gè)線程。在多處理器機(jī)器上,這意味著您可能有多個(gè)線程分布在多個(gè)處理器上,所有線程都高興地放棄工作。


但是,盡管CPython確實(shí)使用了操作系統(tǒng)線程(理論上允許多個(gè)線程在解釋器中同時(shí)執(zhí)行),但解釋器還強(qiáng)制GIL由線程獲取,然后它才能訪問解釋器并進(jìn)行堆棧并可以修改內(nèi)存中的Python對(duì)象。一切都是故意的。后一點(diǎn)是GIL存在的原因:GIL防止多個(gè)線程同時(shí)訪問Python對(duì)象。但是,這并不能使您(如銀行示例所示)免于成為對(duì)鎖敏感的生物。你不會(huì)搭便車。GIL可以保護(hù)翻譯人員的記憶,而不是您的理智。


有關(guān)更多詳細(xì)信息,請(qǐng)參見Jesse Noller的帖子的“ Global Interpreter Lock”部分。


要解決此問題,請(qǐng)查看Python的multiprocessing模塊。


多個(gè)進(jìn)程(明智地使用IPC)是一種為線程編寫多CPU應(yīng)用程序的更好方法。


查看完整回答
反對(duì) 回復(fù) 2019-10-11
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

AFAIK,在CPython中,全局解釋器鎖定意味著在任何一次運(yùn)行的Python代碼塊不能超過一個(gè)。盡管這實(shí)際上并不會(huì)影響單個(gè)處理器/單核計(jì)算機(jī)上的任何內(nèi)容,但是在多核計(jì)算機(jī)上,這意味著您實(shí)際上一次只能運(yùn)行一個(gè)線程-導(dǎo)致所有其他內(nèi)核都處于空閑狀態(tài)。


查看完整回答
反對(duì) 回復(fù) 2019-10-11
  • 3 回答
  • 0 關(guān)注
  • 974 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)