一、进程与线程的区别:
(1)进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。
(2)进程采用fork创建(复制虚拟地址空间),线程采用clone创建(共享而已)。
(3)进程切换与线程切换的区别
进程切换要保存
页表——对应虚拟内存资源、
文件描述符表/打开文件表——对应打开的文件资源
寄存器——对应运行时数据
信号控制信息/进程运行信息
而线程切换只要保存线程的一些运行时的数据,比如线程的id、寄存器中的值、栈数据。
所以线程的切换速度要比进程快的多。
(4)一个进程包含多个线程,同个进程中的线程资源是共享的
(5)一个进程奔溃不会导致别的进程奔溃,一个线程奔溃会导致同个进程里面的线程奔溃。
二、协程:
协程,是一种比线程更加轻量级的存在,一个线程可以拥有多个协程,并且一个线程内的协程绝对是串行运行的。协程是一个函数,可以进行上下文切换,是在用户(应用程序,而不是操作系统),由用户自己定义何时切换,切换内容保存在用户自己的变量中(用户栈或者堆),在用户态中即可进行切换,效率高。
协程可用于I/O阻塞型,有5个I/O的认为要处理,可以用协程,当一个协程(特殊子进程)阻塞时,它可以切换到其他没有阻塞的协程上去继续执行,这样就能得到比较高的效率。当I/O达到数量较大时应用“多线程+协程”处理。
注:图来自网络。