程序、进程、线程、协程
廖家龙 用心听,不照做

进程和程序的区别:

  • 程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合

  • 进程(Process):是动态的,是程序的一次执行过程,同一个程序多次执行会对应多个进程

进程和线程的区别:

  • 调度:进程是资源管理的基本单位,线程是程序执行的基本单位。
  • 切换:线程上下文切换比进程上下文切换要快得多。
  • 拥有资源: 进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的资源。
  • 系统开销: 创建或撤销进程时,系统都要为之分配或回收系统资源,如内存空间,I/O设备等,OS所付出的开销显著大于在创建或撤销线程时的开销,进程切换的开销也远大于线程切换的开销。

线程和协程的区别:

  • 线程和进程都是同步机制,而协程是异步机制。

  • 线程是抢占式,而协程是非抢占式的。需要用户释放使用权切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。

  • 一个线程可以有多个协程,一个进程也可以有多个协程。

  • 协程不被操作系统内核管理,而完全是由程序控制。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

  • 协程的暂停完全由程序控制,线程的阻塞状态是由操作系统内核来进行切换。

    因此,协程的开销远远小于线程的开销。

  • 协程能保留上一次调用时的状态。

PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB