簡體   English   中英

python multiprocessing,cpu-s和cpu內核

[英]python multiprocessing, cpu-s and cpu cores

我正在具有8個cpu-s的計算機上嘗試python3 multiprocessing ,每個cpu具有四個核心(信息來自/proc/cpuinfo )。 我寫了一個帶有無用功能的小腳本,花time看完成它需要多長時間。

from multiprocessing import Pool,cpu_count
def f(x):
    for i in range(100000000):
        x*x
    return x*x
with Pool(8) as p:
    a = p.map(f,[x for x in range(8)])
#~ f(5)

不進行多處理就調用f()大約需要7秒鍾( time的“實際”輸出)。 如上所示,使用8的池調用f() 8次,大約需要7秒鍾。 如果我用4個池調用8次,則得到的時間約為13.5s,因此啟動腳本會有一些開銷,但運行時間是原來的兩倍。 到現在為止還挺好。 現在是我不理解的部分。 如果有8個cpu-s每個都有4個內核,如果我用32個池調用32次,據我所知它應該再次運行7s左右,但實際上需要32s,這比運行f()在8池比賽中32次。

因此,我的問題是multiprocessing無法利用內核,或者我對內核不了解,還是其他?

簡化且簡短。.Cpu-s和內核是計算機擁有的硬件。 在此硬件上有一個操作系統,即硬件和計算機上運行的程序之間的中間人。 在計算機上運行的程序分配有cpu時間。 這些程序之一是python interpetar,它運行所有以.py結尾的程序。 因此,在您計算機上的CPU時間中,時間分配給了python3。*,這反過來又將時間分配給了您正在運行的程序。 此速度將取決於您擁有的硬件,正在運行的操作以及在所有這些實例之間分配cpu時間的方式。

如何分配CPU時間? 這就像一個while循環,OS在程序之間分配增量,而python解釋器將增量分配時間分配給python解釋器運行的程序。 這就是程序行為異常時整個計算機停止運行的原因。

許多進程並不等於對硬件的更多訪問。 它確實等於python解釋器分配的時間所分配的cpu時間。 由於您增加了python解釋器下對您的應用程序有效的程序的數量。

許多過程等於更多的工作量。


您實際上在代碼中看到了這一點。 您將主力工作的數量增加到分配給cpu-time的python解釋器在如此多的進程之間分配的程度,以至於所有進程都變慢了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM