进程、线程、协程

进程与线程

  • 进程是资源分配的基本单位;线程是进程的一个执行单元,它是比进程更小的能独立运行的基本单位。
  • 一个进程中有多个线程,多个线程共享所属进程的堆和方法区资源。每个线程有自己的程序计数器和栈区域。
  • 创建或撤销进程时,系统都要为它分配或回收资源,开销远比线程的大,而且线程的切换开销也比进程的要小。
    进程、线程、协程

多进程和多线程:

  • 多进程中,每个进程拥有自己的数据,互不干扰,同步简单。但占用内存多,切换复杂,CPU利用率低。
  • 多线程中,多个线程共享所属进程的数据,切换简单,CPU利用率高。但同步较难。

协程和线程

  • 协程是一种用户态的轻量级线程,协程的调度完全由用户控制,一个线程可以有多个协程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,切回来时再恢复之前保存的寄存器上下文和栈。直接操作栈,所以基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。进程和线程都是同步机制,而协程是异步的。