浏览器
并发与并行
并发和并行不一样
- 并发:是同一时刻多件事情同时进行
- 并行:只要一段时间内同时发生多件事情就行
举例
- 分别有任务 A 和 任务 B
- 在一段时间内通过任务之间的切换来完成这两个任务,这个情况是并发
- 但是 CPU 存在两个核心,可以同时执行这两个任务,这种情况是并行
进程、线程与协程
- 进程是 cpu 资源分配的最小单位(是能拥有资源和独立运行的最小单位)
- 线程是 cpu 调度的最小单位(线程是建立在进程的基础上的一次程序运行单位)
- 协程,是一种基于线程之上,由程序员自己写程序来管理的轻量级线程,也叫纤程(Fiber)或绿色线程(GreenThread)
区别:
- 进程
- 进程是操作系统分配资源的最小单位
- 程序运行的实例
- 同一个程序可以产生多个进程
- 一个进程由一个或多个线程组成
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见
- 线程
- 线程是程序执行(操作系统能够进行运算调度)的最小单位
- 线程一次只能执行一个任务
- 有自己的调用栈、寄存器环境
- 同一进程的线程共享进程资源
- 调度和切换:线程上下文切换比进程上下文切换要快得多
- 协程
- 在同一个线程上
- 由用户自己进行调度
- 适用于被阻塞的,且需要大量并发的场景。
- 不适用于大量计算的多线程,遇到此种情况,更好实用线程去解决。
由于协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上。
因此,协程的开销远远小于线程的开销,也就没有了 ContextSwitch 上的开销。
参考: