1.多任务的理解 生活中与很多场景是同时进行的,比如开车的时候手和脚是同时来控制车。还有一些歌手边唱歌边跳舞。 我们可以理解为我们的大脑控制着我们的身体进行不同的动作。大脑就是cpu,身体的所有支配动作用到的部位为我们的资源。 试想下如果我们的大脑只能控制一个动作完成后才能控制下一个动作,也就是说我们只能先唱完歌在去跳舞,这是不是很尴尬呢?
下面模拟一下唱歌跳舞
def sing(): for i in range(3): print('我正在唱歌。。。%d'%i) sleep(1) def dance(): for i in range(3): print('我正在跳舞。。。%d'%i) sleep(1) if __name__ == '__main__': sing() # 先唱歌 dance() # 在跳舞
结果如下:
是不是很尴尬呢。。
2.多任务的概念
多任务就是操作系统执行多个任务,比如电脑可以同时开qq,微信,等等,而且qq还可以同时开多个聊天界面。但是注意的是cpu的核数是有限的,所以当任务数大于核数的时候其实所执行的多任务是一个假象其实是操作系统轮流让各个任务交替执行,由于cpu的执行速度很快所以让人感觉就是在同时进行。这里引出两个概念并发与并行。
并发:任务数大于cpu核数,通过操作系统的调度算法实现假象多任务
并行:任务数小与cpu核数,实现正真的多任务一起执行。
单线程执行 def saySorry(): print("亲爱的,圣诞节快乐!") time.sleep(1) if __name__ == "__main__": for i in range(5): saySorry()
多线程执行 import time def saySorry(): print("亲爱的,圣诞节快乐!") time.sleep(1) if __name__ == "__main__": for i in range(5): t = threading.Thread(target=saySorry) t.start() #启动线程,即让线程开始执行
执行唱歌跳舞的多任务。 import threading from time import sleep,ctime def sing(): for i in range(3): print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == '__main__': print('---开始---:%s'%ctime()) t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() #sleep(5) # 屏蔽此行代码,试试看,程序是否会立马结束? print('---结束---:%s'%ctime())