进程和线程有什么区别?
进程是一个程序运行起来的状态,线程是一个进程中的不同执行路径。
专业角度:进程是操作系统分配资源的基本单位,线程是执行调度的基本单位(线程共享进程的内存空间,不会分配自己独立的内存空间)
线程的实现
linux中的实现:
就是一个普通的进程,只不过和其他进程共享资源(内存空间、全局数据等)。
其他操作系统:
纤程
纤程:用户态的线程,线程中的线程,切换和调度不需要进过OS
JVM中的一个线程对应着OS中的一个线程,而多个纤程才对应OS中的一个进程。
java目前需要用扩展包才能实现(2021.06.10)
进程调度
内核进程调度器决定:该哪一个进程运行?何时运行?运行多长时间?(可以自己实现,实现的原则:最大限度压榨CPU资源)
调度的方式
抢占式/非抢占式
进程调度的基本概念
- 进程的类型:
IO密集型 大部分时间用于等待 IO
CPU密集型 大部分时间用于计算 - 进程的优先级:
实时进程>普通进程(0~99)
进程的nice值(-20~19) - 时间分配:
linux采用按优先级的CPU时间比
其他系统多采用按优先级的时间片
其他概念
僵尸进程:
父进程创建子进程后,会维护子进程的一个PCB结构。子进程退出,如果父进程没有释放,那么子进程会成为一个僵尸进程(ps -ef|grep defuct)
孤儿进程:
子进程未结束前,父进程已经结束
孤儿进程会成为init进程的孩子