进程、线程、协程

什么是进程?

  进程(Process)是正在运行的程序的实例,是程序的实体,由程序、数据进程控制块(PCB Processing Control Block)三部分组成。进程有自己的地址空间,包括文本区域(存储处理器执行的代码)、数据区域(存储变量和执行期间动态分配的内存)、堆栈区域(存储活动过程调用的指令和本地变量)。进程具有

  • 动态性:晋城市程序在多道程序系统中的一次执行过程,动态产生动态消亡。
  • 并发性:任何进程可以同其他进程一起并发执行
  • 独立性:进程是一个能独立进行的基本单位,是系统分配资源和调度的独立单位。
  • 异步性:进程可以各自独立的进行

  运行中的进程有以下三种基本状态

  • 就绪状态:已获得除处理器以外的所需资源,等待处理器资源。
  • 运行状态:进程已占用处理器资源。
  • 阻塞状态:由于进程需要等待某种条件(如I/O操作),在条件满足之前无法继续进行。该事件发生前即使把处理器资源分配给该进程也是无法运行的。

什么是线程?

  线程(thread)是操作系统能够进行运算调度的最小单位,线程从属于进程,是进程中的实际运作单位,是程序的实际执行者。一个进程中可以并发多个线程,每条线程并行执行不同的任务。

  线程由相关堆栈(系统栈或用户栈)寄存器(存储线程内的局部变量,不存储其他线程的变量和线程控制块(TCB Thread Control Block)组成。线程具有以下属性

  • 轻型实体,线程实体基本上不拥有系统资源
  • 是独立调度和分配的基本单位
  • 可并发执行
  • 共享进程资源:在同一进程中的所有线程都可以共享该进程所有的资源,所有的线程都有相同的地址空间(进程的地址空间),线程可以访问该地址空间的每一个虚地址,可以访问进程所拥有的已打开的文件。

  对操作系统而言,线程是最小的执行单元,进程是最小的资源管理单元,它们都是操作系统所管理的。

  线程具有以下几种状态:初始化、可运行、运行中、阻塞、销毁

什么是协程?

  协程是一个特殊的函数,这个函数可以被挂起,也可以重新在挂起处外继续运行,跟进程、线程不是同一个维度的概念。

  一个进程可以包含多个线程,一个线程可以包含多个协程。即一个线程里可以有多个这样的特殊函数在运行,但是一个线程里的多个协程的运行是串行的。如果是多核cup,多个进程或者一个进程里的多个线程是可以并行运行,但是一个线程的多个协程是绝对串行的,不管是几核的cup。当一个协程在运行的时候,其他协程必须挂起。

   协程应用在go、java、python等语言里

   

参考:https://www.jianshu.com/p/6dde7f92951e

原文地址:https://www.cnblogs.com/smallzhen/p/12104777.html