1.什麼是“多任務”呢?
簡單地說,就是操作系統可以同時執行多個任務
在代碼裏面,就是一個程序有多個地方同時執行
打個比方,你一邊用着這瀏覽器上網,一邊在聽MP3,一邊在用Word趕作業,這就是多任務
2.單核CPU是怎麼解決多任務的?
單核:意味着同一時刻只能執行一件事情
操作系統輪流讓各任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01,再切換到任務3,
執行0.01秒。。。。。這樣反覆的執行下去,每個任務都是交替執行的,但是由於CPU的執行速度實在是太快了,
我們感覺就像是所有任務都在同時執行一樣,這就是所謂的 “時間片輪轉” 。3. 並行和併發
並行: 真的多任務 (CPU的核數大於任務數量)
併發: 假的多任務 (CPU的核數小於任務數量)
真正的並行執行多任務只能在多核CPU上實現,但是,由於任務數量遠遠多於CPU的核心數量,所以,操作系統也會自動 把很多任務輪流調度到每個核心上執行。
單任務:
import time
import threading
def dance():
for i in range(5):
print("---dancing---")
time.sleep(1)
def sing():
for i in range(5):
print("---singing---")
time.sleep(1)
def main():
print(time.ctime())
dance()
sing()
print(time.ctime())
if __name__ == '__main__':
main()
運行的結果爲: 先把dance執行完花費5秒鐘, 再花費5秒鐘執行完sing, 一共花費10秒鐘
多任務:
import time
import threading
def dance():
for i in range(5):
print("---dancing---")
time.sleep(1)
print(time.ctime())
def sing():
for i in range(5):
print("---singing---")
time.sleep(1)
print(time.ctime())
def main():
t1 = threading.Thread(target = dance)
t2 = threading.Thread(target = sing)
t1.start()
t2.start()
if __name__ == '__main__':
main()
運行的結果爲: 兩個任務同步執行,每次花費1秒,共花費5秒,從下圖的測試時間可以看出兩個任務是同步執行的。