赞
踩
并发(任务数 > cpu核数):假的多任务,通过时间片旋转或优先级调度,让程序切换的速度足够快,使人产生在同时运行多个任务的假象
并行(cpu核数 >= 任务数):真的多任务,每一个cpu都各自运行一个任务
·
进程:multiprocessing
线程:threading
协程:gevent
(最常用的)
以上在程序中都是并发执行,通过在极短的时间内cpu多次重复调用不同的任务来实现多任务。进程和线程根据CPU的核数,也可能出现并行的情况。但是协程是在一个线程里所以一定只是并发执行。
·
进程 是资源分配的单位,线程 是系统调度的单位
·
● 当执行一个程序,系统会自动分配内存资源加载数据,实际上是开启一个进程,分配新的内存空间创建多个新进程分别执行所要执行的任务可实现多任务。
● 每一个进程都会有一个线程从上向下读取代码执行代码,这个线程叫做主线程,在一个进程中创建多个子线程分别执行对应的代码段可实现多任务。
● 利用线程执行代码遇到延时操作时,在等待的期间分配线程去做其他的任务从而实现多任务,这种实现操作叫做协程。
·
进程:
切换需要的资源最大,效率最低,每次创建新进程时会复制一遍所有的代码和数据,但是是实现多任务的方法中最为稳定的方法,当所要处理的任务数量未知或庞大时,可通过创建进程池提供指定数量的进程供用户循环使用。
·
线程(不考虑有GIL阻碍多线程):
依赖于进程,当进程死亡时,线程必死,当每个子线程所要执行的动作过于频繁时,可能导致数据紊乱(可用互斥锁解决问题),切换需要的资源比进程少且共享全局变量
·
协程:
依赖于线程,当线程死亡时,协程必死,协程切换任务占用的资源最少,效率最高,执行不同的任务就像调用不同的函数一样快捷,但是最不稳定,会随着线程的死亡而死亡。
在程序进行延时操作时(比如下载url,time.sleep(),accept()等待接收等操作)线程会等待操作完成才继续运行,而协程的作用就是让线程在这等待的时间里先去做其他的任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。