进程 线程 协程

进程、线程、协程

  • 进程是系统进行资源分配的单位,它是程序运行的一个实例,例如任务管理器的一个任务就是一个进程,一个程序也可以拥有多个进程。

  • 线程是程序执行的最小单位,一个进程中包含一个或多个线程。线程是进程的一个实体,是CPU调度的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

  • 协程是一种用户态的轻量级线程,也就是说在操作系统中并没有协程的概念,它是程序级别的,由程序创建并调度。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。


 

它们之间的区别

进程与线程的区别

  • 1.进程是资源分配最小单位,线程是程序执行的最小单位。

  • 2.进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据。

  • 3.CPU切换一个线程比切换进程花费小。

  • 4.创建一个线程比进程开销小。

  • 5.线程占用的资源要⽐进程少很多。

  • 6.线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,进程之间的通信需要以通信的方式(IPC)进行。

  • 7.多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间),多线程程序更不易维护,一个线程死掉,整个进程就死掉了(因为共享地址空间)。

  • 8.进程对资源保护要求高,开销大,效率相对较低,线程资源保护要求不高,但开销小,效率高,可频繁切换。

线程与协程的区别

  • 1.一个线程可以创建很多协程。

  • 2.无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员-必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力)

  • 3.高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

  • 4.协程无法利用多核资源,协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上。

  • 5.协程进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

posted @ 2019-09-25 17:58  ITs-WHY  阅读(246)  评论(0编辑  收藏  举报