我想知道,在雙核CPU上運行兩個腳本(同時并行)與串行運行(在不同時間或在兩個不同CPU上運行)相比,是否會降低代碼的速度。在試圖回答這個問題時,應該考慮哪些因素呢?
uj5u.com熱心網友回復:
不;假設行程可以獨立運行(任何一個都不等待另一個前進),它們在多核系統上的并行運行將比串行運行更快。例如,這里有一個叫busy.py的小腳本:
for i in range(400000000)。
pass pass
單獨運行一次:
$ time python busy.py
real 0m6.875s
user 0m6.871s
sys 0m00.004s
連續運行兩次:
$ time (python busy.py; python busy.py)
real 0m14.702s
用戶 0m14.701s
sys 0m0.001s
并行運行兩次(在多核系統上--依靠作業系統來分配不同的內核):
$ time (python busy.py & python busy.py)
real 0m7.849s
用戶 0m7.843s
sys 0m00.004s
如果我們運行python busy.py & python busy.py或者單核系統,或者用任務集進行模擬,我們得到的結果看起來更像串行情況,而不是并行情況:
$ time (taskset 1 python busy.py & taskset 1 python busy.py)
實數 0m13.057s
用戶 0m13.035s
sys 0m00.013s
這些數字中存在一些差異,因為正如@tdelaney所提到的,有其他應用程式在爭奪我的核心,并且發生了背景關系切換。(你可以通過/usr/bin/time -v查看發生了多少次背景關系切換。)
盡管如此,他們還是明白了一個道理:串行運行兩次所需的時間必然是運行一次的兩倍,就像在單個內核上 "并行 "運行兩次(背景關系切換)一樣。在兩個不同的核心上并行運行兩次所需的時間只相當于運行一次,因為這兩個行程確實可以同時運行。(假設它們沒有相互等待,沒有爭奪相同的資源,等等)
這就是為什么我們要在兩個不同的核心上并行運行兩次,而不是只運行一次。
這就是為什么多行程模塊對于Python中的可并行任務非常有用。(執行緒也很有用,如果任務是與 IO 相關的而不是與 CPU 相關的。)
uj5u.com熱心網友回復:
當運行腳本時,雙核如何作業
。運行兩個獨立的腳本
。如果你在雙核CPU上運行一個腳本然后再運行另一個腳本,那么 你的腳本是否會在每個核心上運行取決于你的作業系統。
如果你在雙核 CPU 上運行一個腳本,然后再運行另一個腳本,那么你的腳本能否在每個內核上運行取決于你的作業系統。
運行兩個獨立的執行緒
在雙核CPU上運行兩個獨立的執行緒,那么你的執行緒實際上將比單核的速度更快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309419.html
標籤:
下一篇:如何在資料庫視圖中讀取數值?
