時間片輪轉(zhuǎn):每個任務(wù)執(zhí)行萬分之一秒,然后切換。
- 并行:真的多任務(wù)。每個CPU核心執(zhí)行一個任務(wù)
- 并發(fā):假的多任務(wù)。啟用時間輪轉(zhuǎn),CPU對每個任務(wù)輪流計算,每次只用萬分之一秒執(zhí)行一個任務(wù)。
當(dāng)只有4個任務(wù)時,4核CPU可以實現(xiàn)并行,即每個核心負(fù)責(zé)一個任務(wù)。
但是當(dāng)任務(wù)數(shù)超過CPU的核心數(shù)時,則必須要啟用時間輪轉(zhuǎn)。
一般情況下,全都是并發(fā),因為任務(wù)數(shù)總是超過核心數(shù)。
Python線程代碼:
import threading
def func():
for i in range(10):
print('Run...')
th = threading.thread(target=func)
th.start()
查看當(dāng)前運(yùn)行多線程數(shù)量:
由于多線程同時運(yùn)行多個線程,每執(zhí)行完成一個就銷毀一個,所以當(dāng)前線程數(shù)量是動態(tài)變化的。
代碼:
# .....
# .....
th = threading.thread(target=func)
th.start()
while True:
amount = len(threading.enumerate)
if amount < 1:
break
sleep(0.5)
注意:程序執(zhí)行到th.start()開啟線程后,不會等待所有線程結(jié)束,而會直接執(zhí)行下一句,同時多條線程一起執(zhí)行。
所以,這時候去讀取線程數(shù),是一個動態(tài)的過程,需要每隔一段時間重復(fù)去讀取。這時會發(fā)現(xiàn),線程數(shù)是逐漸減少的。