一、什么是进程?
正在运行的程序的实例
在操作系统没有引入进程的时候,CPU每次只能执行一个程序多个程序只能顺序执行,这样就造成了资源的浪费浪费了大量的时间,为了提高CPU的利用率于是操作系统引入了进程以及中断处理,这样就实现了通一时间内可以运行多个程序提高效率。
资源分配基本单位
二、什么是线程?
进程的实际运行最小单位
进程虽然实现了并发编程但是平凡创建进程的开销较大,引入的线程是轻量级的进程,可以减少开销提高效率。
调度执行的基本单位
三、进程和线程的联系
相关
- 一个进程可能有一个线程(单线程),也可能有多个线程(多线程)
- 一个进程中的线程之间文件描述表、内存指针都是同一份,状态、优先级、上下文、记账信息每个线程独立
- 一个进程对应一组PCB,每个PCB对应一个线程
区别
- 进程是资源分配的基本单位,线程是执行调度的最小单位
- 对进程的调度过程实际上是对线程的调度过程
- 线程是轻量级的进程,进程包含线程,线程的创建代价比进程小(正式线程存在的意义)
- 进程之间互通较难需要通过映射,而线程之间资源是互通的
四、线程的状态
新建(NEW):创建出线程但是没有启用。
运行状态(RUNNABLE):调用start方法启用线程,此时线程实在执行状态
无限等待状态(WATING):这种状态下不会被CPU分配执行时间,等到被唤醒。
无Timeout参数的Object.wait()方法
无Timeout参数的Thread.join()方法
LockSupport.park()方法
期限等待(TIME_WAITING):在这种状态下不会被CPU分配执行实现,无需等待被其他线程显式唤醒,在时间结束后即可自动唤醒。
堵塞状态(BLOCKED):线程被堵塞
结束(TERMINATED):线程执行结束