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