python什么是主進(jìn)程 python中一個(gè)變量是如何穿梭于多線程與多進(jìn)程的?
python中一個(gè)變量是如何穿梭于多線程與多進(jìn)程的?多線程共享全局變量,多個(gè)進(jìn)程不能共享全局變量,因?yàn)槊總€(gè)進(jìn)程都有獨(dú)立的內(nèi)存地址。在中間人的幫助下,這個(gè)中間人一般是消息隊(duì)列或者python內(nèi)置的多進(jìn)程
python中一個(gè)變量是如何穿梭于多線程與多進(jìn)程的?
多線程共享全局變量,多個(gè)進(jìn)程不能共享全局變量,因?yàn)槊總€(gè)進(jìn)程都有獨(dú)立的內(nèi)存地址。在中間人的幫助下,這個(gè)中間人一般是消息隊(duì)列或者python內(nèi)置的多進(jìn)程通信隊(duì)列。
python異步協(xié)程跟多進(jìn)程、多線程哪個(gè)效率高?
Python多線程效率不高,因?yàn)橛蠫IL鎖,執(zhí)行不能并發(fā)。
一個(gè)被排除,留下異步比較多進(jìn)程。哪一個(gè)是高效的,主要取決于它是否是一個(gè)計(jì)算密集型任務(wù),以及進(jìn)程之間的通信有多頻繁。
請(qǐng)記住,單個(gè)進(jìn)程是異步的,只有一個(gè)內(nèi)核在滿負(fù)荷工作,多個(gè)進(jìn)程可以利用多個(gè)內(nèi)核的功能。
最后,多進(jìn)程和異步可以混合,這種結(jié)構(gòu)有點(diǎn)類似于Go,可能是最高效的組合。
為什么python的GIL問(wèn)題一直讓人詬病,python社區(qū)卻不解決?
GIL,這把大鎖的存在是有原因的。首先,我們知道python是一種解釋語(yǔ)言,代碼執(zhí)行是在解釋器中進(jìn)行的。解釋性語(yǔ)言有一個(gè)共同的問(wèn)題。;無(wú)法實(shí)現(xiàn)真正的多線程并發(fā)。這是先天性的。多個(gè)線程共享主進(jìn)程的資源。如果你不 t鎖死線程,讓它們并發(fā),多線程修改共享數(shù)據(jù),會(huì)導(dǎo)致數(shù)據(jù)混亂,不靠譜。因?yàn)榉g者不。;我不知道你在代碼的什么地方修改了共享數(shù)據(jù),它直接鎖定了線程。解釋器一次只允許一個(gè)線程運(yùn)行。
當(dāng)然,你可能會(huì)說(shuō),我 我只是要求解釋器鎖定要修改的共享數(shù)據(jù),這樣多線程才能真正并行。其實(shí)國(guó)外老板早就這么干了。測(cè)試的結(jié)果是,執(zhí)行效率不如直接鎖線程。到目前為止,python開(kāi)發(fā)團(tuán)隊(duì)還沒(méi)有針對(duì)這個(gè)問(wèn)題提出更好的解決方案。這是解釋性語(yǔ)言中的一個(gè)常見(jiàn)問(wèn)題。另外,解決這個(gè)問(wèn)題在技術(shù)上也有難度。
雖然GIL這個(gè)大鎖的存在影響了多線程,不能真正并發(fā),但是我們可以用多個(gè)進(jìn)程來(lái)解決。
上次在Stack Overflow上看到有人討論,簡(jiǎn)短的回答是太難改了...因?yàn)橐紤]的問(wèn)題太多了。
。
至于要考慮的問(wèn)題,我不知道。;我不太了解這些技術(shù),我想你也不知道。;t也沒(méi)有,所以我不會(huì) 不要列舉它們。
首先,python 的性能和其他語(yǔ)言相比真的不高。
第二,如果你在python中使用了線程,我想你應(yīng)該對(duì)這個(gè)地方為什么使用線程有非常深刻的理解。
第三,流程的效率也不錯(cuò)??梢詽M足日常用膠需求。
全球鎖是一個(gè)歷史問(wèn)題。無(wú)論如何,魔變中的社群會(huì)有一定程度的提升。在這個(gè)階段,它足夠作為膠水和快速業(yè)務(wù)代碼。當(dāng)你需要考慮更高的性能時(shí),可以考慮換一個(gè)。重寫(xiě)業(yè)務(wù)代碼也很快。