进程和线程
- 进程是可并发执行的程序在某个数据集合上的一次计算活动,进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位。
- 线程是cpu调度和分配的基本单位。
- 我们打开的聊天工具,浏览器都是一个进程。
- 进程可能有多个子任务,比如聊天工具要接受消息,发送消息,这些子任务就是线程。
- 资源分配给进程,线程共享进程资源。
对比
进程 | 线程 |
---|---|
进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位 | 线程是进程运行和执行的最 |
创建撤销切换开销大,资源要重新分配和收回 | 仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码 |
资源拥有的基本单位 | 基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈) |
资源分配的基本单位 | 独立调度分配的单位 |
进程间相互独立,互不影响 | 线程共享一个进程下面的资源,可以互相通信和影响 |
系统赋予的独立的内存地址空间 | 由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量 |
线程切换
- cpu给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。
- 切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。
- 从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。
- 而上下切换时会消耗大量的cpu时间。
线程开销
- 上下文切换消耗
- 线程创建和消亡的开销
- 线程需要保存维持线程本地栈,会消耗内存
进程、线程和协程的理解
- 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
- 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。
- 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
- 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。