网络中的多任务
多任务是基于操作系统高效执行而诞生的,这种现象很常见如我们在好多设备上一边听着音乐,一边看小说,时不时的还有聊天消息的提示,这就是系统管家在同一时间有条理的执行各种各样的应用,这就是多任务。
多任务的简单实现过程
首先我们创建一个不是多任务的功能:
#encoding:utf-8
import os
import time
def sing():
"""
唱歌函数
:return:
"""
for i in range(3):
print("唱第{}首歌".format(i+1))
time.sleep(1)
def dance():
"""跳舞函数"""
for i in range(3):
print("跳第{}段舞".format(i+1))
time.sleep(1)
def main():
sing()
dance()
if __name__ == '__main__':
main()
结果:
我们看到没有创建多任务的时候,实现这两个功能是按顺序执行的,第一个功能执行完才执行另一个功能。
接下来我们创建一个多任务实现相同的功能
#encoding:utf-8
from multiprocessing import Process
import time
def sing():
for i in range(3):
print("唱%d首歌"%(i+1))
time.sleep(1)
def dance():
for i in range(3):
print("跳%d段舞"%(i+1))
time.sleep(1)
def main():
p1 = Process(target=sing)
p2 = Process(target=dance)
p1.start()
p2.start()
if __name__=="__main__":
main()
结果
我们可以看到有了多任务后,系统会在同一时间实现不同的功能,由于让我们看的更清晰才加入time模块,因为在系统中实现第一个程序是非常快的,不加time模块我们从结果看依然不能很好的体现多任务。 其实像这样同时实现多个功能是运用进程或线程来实现的。
多任务一起执行的原理
以我们设备管家CPU来说吧,它其实有单核CPU,多核CPU。在执行任何任务的时候首先都要经过CPU的分配协调后才能呈现出来,单核CPU就意味着同一时刻只做同一事情,多核就相当于多个单核同时工作,日常使用单核执行应用时理论上执行一个,但我们看起来好多个应用都在执行,这其实是CPU执行速度很快,当把需要执行的应用循环起来,这样给我们的感觉是同时执行,但实际依然是一个一个执行的只是循环并且需要时间特别短了以至于我们分辨不出而,简称时间片轮转实现多任务(假多任务)。
除以上实现多任务还可以通过优先级实现,比如我们听着音乐在单核CPU中,通过上面循环的话音乐会断断续续,这么一来就要采用优先级不间断模拟实现多任务。
在多核CPU上运行的话每个应用有专属的单核CPU来执行并且不用循环,实现真正同一时间,同时执行的目的,我们称这样为并行实现真的多任务,那如何判断是不是真的多任务呢,我们看CPU核数与任务数比较,当任务数小于等于CPU核数的话就是并行这任务,除此之外就是并发的接任务。