Skip to content
大纲

浏览器

并发与并行

并发和并行不一样

  • 并发:是同一时刻多件事情同时进行
  • 并行:只要一段时间内同时发生多件事情就行

举例

  • 分别有任务 A 和 任务 B
    • 在一段时间内通过任务之间的切换来完成这两个任务,这个情况是并发
    • 但是 CPU 存在两个核心,可以同时执行这两个任务,这种情况是并行

进程、线程与协程

  • 进程是 cpu 资源分配的最小单位(是能拥有资源和独立运行的最小单位)
  • 线程是 cpu 调度的最小单位(线程是建立在进程的基础上的一次程序运行单位)
  • 协程,是一种基于线程之上,由程序员自己写程序来管理的轻量级线程,也叫纤程(Fiber)或绿色线程(GreenThread)

区别:

  • 进程
    • 进程是操作系统分配资源的最小单位
    • 程序运行的实例
    • 同一个程序可以产生多个进程
    • 一个进程由一个或多个线程组成
    • 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间 (包括代码段、数据集、堆等) 及一些进程级的资源 (如打开文件和信号),某进程内的线程在其它进程不可见
  • 线程
    • 线程是程序执行 (操作系统能够进行运算调度) 的最小单位
    • 线程一次只能执行一个任务
    • 有自己的调用栈、寄存器环境
    • 同一进程的线程共享进程资源
    • 调度和切换:线程上下文切换比进程上下文切换要快得多
  • 协程
    • 在同一个线程上
    • 由用户自己进行调度
    • 适用于被阻塞的,且需要大量并发的场景。
    • 不适用于大量计算的多线程,遇到此种情况,更好实用线程去解决。

由于协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上。

因此,协程的开销远远小于线程的开销,也就没有了 ContextSwitch 上的开销。

参考: