进程与线程、协程的区别

一、进程与线程的区别:

(1)进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。

(2)进程采用fork创建(复制虚拟地址空间),线程采用clone创建(共享而已)。

(3)进程切换与线程切换的区别

进程切换要保存

 页表——对应虚拟内存资源、

 文件描述符表/打开文件表——对应打开的文件资源

 寄存器——对应运行时数据

 信号控制信息/进程运行信息

   而线程切换只要保存线程的一些运行时的数据,比如线程的id、寄存器中的值、栈数据。

所以线程的切换速度要比进程快的多。

(4)一个进程包含多个线程,同个进程中的线程资源是共享的

(5)一个进程奔溃不会导致别的进程奔溃,一个线程奔溃会导致同个进程里面的线程奔溃。

二、协程:

        协程,是一种比线程更加轻量级的存在,一个线程可以拥有多个协程,并且一个线程内的协程绝对是串行运行的。协程是一个函数,可以进行上下文切换,是在用户(应用程序,而不是操作系统),由用户自己定义何时切换,切换内容保存在用户自己的变量中(用户栈或者堆),在用户态中即可进行切换,效率高

协程可用于I/O阻塞型,有5个I/O的认为要处理,可以用协程,当一个协程(特殊子进程)阻塞时,它可以切换到其他没有阻塞的协程上去继续执行,这样就能得到比较高的效率。当I/O达到数量较大时应用“多线程+协程”处理。

注:图来自网络。

进程、线程、协程的上下文切换比较
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。