一、进程
--定义:程序运行起来后,代码及程序所需要的资源(包含内存、变量、硬件等)的总和为一个进程。进程是资源分配的单位,可以理解为内存中分配的一块区域。
二、线程
--定义:每个进程中默认会有一个线程,此线程即为主线程,主线程是CPU能够调度的最小单位,真正执行程序时,是线程在动态的执行代码,进程只是一个资源的总和。
三、协程
--定义:协程也是一个线程,是一个在遇到IO阻塞进行任务切换的一个特殊的线程。协程通过gevent方法实现,gevent的底层实现是greenlet,greenlet的底层实现是yield,当程序(生成器)遇到yield时会阻塞,此时会返回到主程序中,主程序再去调度其他的函数。协程一定属于一个线程,因此协程肯定是通过并发实现的多任务。
四、相同点
--三者都是实现多任务的一种方式
五、不同点
--三者内存开销不一样,进程最大、线程次之、协程最小
--进程是资源分配的最小单位,包含代码和资源
--进程更稳定,一个进程的崩溃不会引起其他进程的崩溃
--线程是CPU调度的最小单位,代码的真正执行时通过线程实现的
--主线程的崩溃会引起其他线程的崩溃
--协程也是一个线程,是一个可以任务切换的线程
--协程需要的资源最少,效率最高,线程次之,进程最低
--根据CPU核数不同,多进程、多线程可能是并行的,而协程肯定是并发的
六、使用时机
--首推协程、然后线程、再然后进程
--进程更稳定
--线程节省资源
--协程效率最高
来源:https://www.cnblogs.com/henji1266/p/12045678.html