进程,线程,协程总结

比较项进程线程协程
占用资源 随程序运行所需内存而变化 初始单位为1MB,固定不可变 初始一般为 2KB,可随需要而增大
调度所属 资源分配由OS完成 由 OS 的内核完成 由用户完成
切换开销 进程切换开销很大 涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP...等寄存器的刷新等 只有三个寄存器的值修改 - PC / SP / DX.
性能问题 进程独立运行 稳健

资源占用太高,频繁创建销毁会带来严重的性能问题,
线程之间上下文切换带来性能问题

资源占用小,不会带来严重的性能问题,
在线程内部切换
数据同步 可通过进程间通信进行数据交换 需要用锁等机制确保数据的一直性和可见性 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

进程:是系统调度和分配资源的最小单位,拥有自己独立的堆和栈,进程由操作系统调度进程。进程维护的是程序所包含的资源(静态资源), 如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等;
线程:是CPU调度和分配任务的最小单位,拥有自己独立的栈,与同一个进程下的其他线程共享所属进程的堆,标准线程由操作系统调度。线程维护的运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集等;
协程:拥有自己独立的栈,与同一个进程下的其他线程共享所属进程的堆,协程由程序员在协程的代码里显式调度;

原文地址:https://www.cnblogs.com/kevin-yang123/p/14179642.html