IO密集型和CPU密集型
进程按照对IO和处理器的依赖,可以分为此两种。顾名思义,IO密集型进程大部分时间都在提交IO请求或者等待IO请求(任何类型的可阻塞资源,键盘输入、网络IO等),GUI属于IO密集型。CPU密集型则把大部分时间花在了代码的执行上,具有代表性的是需要大量计算的程序,比如张量运算等。当然也有一些结合了IO和CPU的程序,比如word,用户输入的同时会进行拼写检查。
进程调度的目标:程序响应迅速、最大系统利用率。作为保证交互式应用和桌面系统的性能,内核倾向于优先调度IO密集型进程,当然这并不绝对。
进程优先级
最基本的调度算法:优先级高的先运行,低的后运行,相同优先级按照轮状方式进行调度,一个接一个重复进行。在某些系统中,优先级高的进程使用的时间片也长。调度器总是选择时间片没有用完而且优先级最高的程序进行。
Linux有两种不同的优先级范围。第一种是nice值,取值范围是-20~19,取值越小优先级越高,默认是0。nice值代表的是时间片的比例,mac中则是绝对值。
第一种是实时优先级,取值范围0~99,取值越大优先级越高。任何实时进程的优先级都高于普通进程,这意味着实时优先级和nice值并不冲突。
CFS
公平调度法。
待续