线程,进程,协程
进程
是什么:
最小的资源分配单位。
进程上下文切换
指 cpu 保持原有的进程的状态的同时去切换到下一个进程
包含两个主要过程:进程地址空间切换和处理器状态切换
线程
是什么
线程是操作系统中最小的调度单位。
线程是进程的子集,也称为轻量级进程。一个进程可以有多个线程,这些线程由调度器独立管理。一个进程内的所有线程都是相互关联的。
线程上下文切换
线程没有自己的地址空间,同一进程的线程之间切换,他们共享同一进程的地址空间,所以只需要切换处理器状态;不同进程的线程之间切换,会引起进程切换
由于同一进程下的线程上下文切换不引起虚拟地址空间切换,所以它们上下文切换的花销要比进程小很多。
协程
轻量级线程,他的内存占用少,只要 2k,且上下文切换成本低,是一个独立执行的函数,由 go 语言启动
进程调度算法
非抢占式调度
一个非常简单的想法就是让所有员工排队用这台计算机,轮到的这个员工一直使用到自己的所有工作都处理完,才让给下一个同事。
操作系统调度到某个进程之后,不会对进程做任何干预,直到该进程阻塞或者结束,才会切换到其他就绪的进程。
但如果轮到的这个员工处理完自己的工作需要 2 小时,但后几名员工都只需要几分钟,这个排序效率就不够好了。
抢占式调度
操作系统调度到某个进程之后会给它分配一个时间片,如果超过时间片还没有结束或者中途被阻塞,该进程会被操作系统挂起,调度其他进程来执行其他程序。
对比
非抢占式调度:更适合调度可以忍受延迟执行的普通进程。简称:进程被cpu调度了
抢占式调度:更适合调度交互性要求高的实时进程。简称:进程只有阻塞或者运行完成之后才能将cpu交给另一个进程
进程的三个状态
- 运行态
- 阻塞态
- 就绪态
运行态到阻塞态 发生IO操作
阻塞态到就绪态 IO操作完成
就绪态到运行态 进程被cpu调度了
运行态到就绪态 时间片用完了