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秒,从下图的测试时间可以看出两个任务是同步执行的。