基本概念
进程
- 进程是执行中的计算机程序。一个进程具有:就绪,运行,中断,僵死,结束等状态(不同操作系统不一样)
- 进程是系统进行资源分配和调度的独立单位;运行中每个进程都拥有自己的地址空间、内存、数据栈及其它资源
- 操作系统本身自动管理着所有的进程(不需要用户代码干涉),并为这些进程合理分配可以执行时间。
- 进程可以通过派生新的进程来执行其它任务,不过每个进程还是都拥有自己的内存和数据栈等
- 进程间可以通讯(发消息和数据),采用 进程间通信(IPC) 方式。
线程
- 线程是进程的实体,是CPU调度和分派的基本单位;
- 一个进程下可以运行多个线程,这些线程之间共享主进程内申请的操作系统资源,不会像进程那样需要申请CPU等资源,节省资源
- 线程无法给予公平执行时间,它可以被其他线程抢占,而进程按照操作系统的设定分配执行时间
协程
- 协程也是线程,称微线程,自带CPU上下文,是比线程更小的执行单元;
- 协程间是协同调度的,非抢占式或合作型,我们自己处理上下文切换,切换开销更小,操作系统完全感知不到,属于程序级别的切换,且没有锁或者线程的开销,非常轻量级,异步版本可能还会比多线程版本快一些
- 单线程内就可以实现并发的效果,最大限度地利用cpu
- 协程需要自己处理上下文切换,所以我们需要一个调度程序,也叫做『事件循环』。此事件循环只循环遍历等待中的调度,并运行它的所有事件。每当我们产生操作时,当前任务会被添加到队列中,且第一个任务(优先级而非顺序)从队列中弹出并开始执行