我有下面的代碼:Python的多線程基礎知識混亂
import time
from threading import Thread
def fun1():
time.sleep(5)
def fun2():
time.sleep(5)
def fun3():
time.sleep(5)
def fun4():
time.sleep(5)
if __name__ == '__main__':
t1 = Thread(target=fun1, args=())
t2 = Thread(target=fun2, args=())
t3 = Thread(target=fun3, args=())
t4 = Thread(target=fun4, args=())
t1.start()
t2.start()
t3.start()
t4.start()
start = time.clock()
t1.join()
t2.join()
t3.join()
t4.join()
end = time.clock()
print("Time Taken = ",end-start)
Que1:一次只能有一個線程進行維護,如果控制與螺紋T1意思,休息其它線程將被等待。一旦上下文切換髮生到線程t2,休息所有其他線程(t1,t3和t4)將等待。 這是正確的理解嗎? Que2:如果我對Que1的理解是真實的,那麼總的時間(開始 - 結束)應該是二十秒(與以順序方式而不是線程方式運行一樣好)...但它有點接近5秒....爲什麼?在一天結束時,線程逐個按順序執行(儘管並非全部) 請用外行的詞彙解釋。我的理解在哪裏不正確?如果我使用多重處理做同樣的事情會怎樣?執行有何不同? (假設)fun1()的代碼對路由器1進行1000次重複次數ping,並花費1分鐘的時間。 同樣,fun2()對路由器2執行1000次重複計數ping,並花費1分鐘的時間。 Similary,fun3()對路由器3進行1000次重複計數ping,並花費1分鐘的時間。
如果我這樣做順序,總預計時間爲3分鐘(ping到R1,然後ping到R2,然後ping到R3) 但是當我使用線程做到這一點時,總執行時間幾乎接近1分鐘。爲什麼?我無法理解。