多任务
现实生活中的多任务
有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的;在线听歌(边下载边听歌);老师边讲边操作等等。
使用程序模拟在线听歌
需求:如标题
import time
def download_music():
'''模拟下载歌曲 需要5秒钟下载完成'''
for i in range(5):
time.sleep(1)
print('正在下载歌曲%d' %(i+1))
def play_music():
'''迷你歌曲的播放,需要5秒钟完成'''
for i in range(5):
time.sleep(1)
print('正在播放歌曲%d'%(i+1))
def main():
download_music()
play_music()
if __name__ == '__main__':
main()
运行结果
分析
很显然刚刚的程序并没有完成下载歌曲和播放歌曲同时进行的要求
如果想要实现“下载与播放”同时进行,那么就需要使用一个新知识,叫做:多任务
多任务
什么叫多任务
什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。
单核cpu如何执行多任务
现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢?
答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。
真正的并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。
并发和并行
并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)。
并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的。