进程与线程的区别:
1、进程是可拥有资源的独立单位,而线程是调度和分派的基本单位。
2、进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。
3、在创建或撤销进程,或者进程切换时,系统开销大。
进程,线程的调度,是由操作系统负责调度,随后切到进程,线程执行。这个过程中cpu经历的状态是由用户态(进程,线程的执行)切换到内核态(操作系统调度),再切换到用户态(进程,线程执行)。可以看出,进程,线程的调度是抢占式的。
与进程,线程不同,协程的调度是进程自己管理的,对内核来说是不可见的。当协程运行到某一个状态,就自动切换到其他进程,线程的执行。这个过程无需操作系统调度,对于cpu而言一直处于用户态,也就减少了消耗。
协程,有几个特点:
协同,因为是由程序员自己写的调度策略,其通过协作而不是抢占来进行切换
在用户态完成创建,切换和销毁
⚠️ 从编程角度上看,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制
generator经常用来实现协程