碎碎念:勤劳i的我又来干文章,今天要干的文章是进程和线程的内容,为了保证文章质量以后要写的详细一点。这里好多内容借用别人的如原文链接
定义
进程与线程
-
进程 是资源分配的基本单位,
进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。
-
线程 是独立调度的基本单位
一个进程中可以有多个线程,它们共享进程资源。例如:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。
资源
- 进程是资源分配的基本单位。是占用资源的
- 线程不占有资源,线程可以访问进程的资源
调度
- 不同进程的线程的切换会引起进程的切换。
- 线程是独立调度的基本单位,线程的切换不会影响进程的切换
系统开销
- 进程间的切换:进程间的切换代价要大于线程间切换的代价,进程间切换涉及CPU的环境,以及IO的额设备资源,同时要保存环境信息的资源内容。
线程间的切换的代价要小的多
读写
- 线程可以直接读写同一进程内的资源,
- 进程必须通过借助IPC实现读取不同进程间的资源
状态
进程的状态
对于进程来说,主要包括
就绪状态(ready):等待被调度
运行状态(running)
阻塞状态(waiting):等待资源
创建状态,准备状态,等待状态,运行状态,退出状态
只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态。
进程的调度算法
批处理系统
调度算法保证的是吞吐量和周转时间,主要从提交到终止的时间
- 先来先服务 FCFS
非抢占式调度算法,主要按照请求的顺序,按照请求的调度
有利于长作业,不利于短作业,长作业需要执行很长的时间,这就造成了短作业等待时间过长 - 短作业优先
非抢占式调度算法,按照估计的运行时间短的优先进行操作,缺点是长作业一直处于等待的状态 - 最短剩余时间优先
最短作业的抢占的版本,按照剩余运行时间顺序进行调度,整个运行时间与当前线程剩余时间 进行比较,如果新的线程时间更少那么就运行新的线程
交互式系统
交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速进行响应