什么叫“多任务”?
就是操作系统可以同时运行多个任务。(至少同时有3个任务正在运行)
单核CPU如何执行多任务? 多核CPU如何执行多任务?
真正的并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。
并发:
指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行
(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)
并行:
指的是任务数小于等于cpu核数,即任务真的是一起执行的
线程:
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用
线程-注意点:
线程执行代码的封装 通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子类class,只要继承threading.Thread就可以了,然后重写run方法
进程:
一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。
不仅可以通过线程完成多任务,进程也是可以的(进程间不同享全局变量)
进程的状态
就绪态:运行的条件都已经慢去,正在等在cpu执行
执行态:cpu正在执行其功能
等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态
进程间通信-Queue:
进程池Pool
(1).当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。
(2).初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务
进程与线程的对比:
(1).功能
进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ
线程,能够完成多任务,比如 一个QQ中的多个聊天窗口
(2).定义的不同
a).进程是系统进行资源分配基本单位.
b).线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.
c).线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享所在进程所拥有的全部资源
(3).区别
a).一个程序至少有一个进程,一个进程至少有一个线程.
b).线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
c).进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
d).线线程不能够独立执行,必须依存在进程中
(4).优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
(5).使用场景:
a). 多进程常用来处理计算密集型任务: 计算密集型任务的特点:是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。计算密集型任务可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。
b).多线程常用来处理IO密集型任务: IO密集型:涉及到网络、磁盘IO的任务都是IO密集型任务,特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。但是也要切记,在执行多任务时,并不是越多线程越好。
作者:天王的
链接:https://www.jianshu.com/p/2917dbe43bf2
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。