操作系统内核对线程的调度非常有意思,因为他的一系列思想和方法论都能从生活和业务开发中找到影子,比如:
超市收银台会分多个收银通道,快速通道针对那些提篮子的客户,慢速通道针对那些推购物车的客户,从而减少提篮子客户的付款等待时间。设想一下,若某个客户只买了几件物品,但是不巧正好排到了购买了一车物品的客户后面,他可能会很失去耐心。
银行营业厅的叫号系统,他会按照VIP客户、普通客户分出多个号段的排队序号,VIP客户的响应速度会快一些,普通客户的响应速度会慢一些。
在内容处理系统中,在处理能力一定的情况下,我们也会按照文章来源的不同进行调度处理,优先快速响应高优先级文章的处理。
在融合存储系统中,会对不同业务的主机I/O请求设置不同的优先级,优先保证重要业务的I/O性能(并发和延迟)。
两个有意思的场景
我们都知道:进程是操作系统进行”资源分配“的基本单位,线程是操作系统进行“调度”的基本单位,从这句话的字面解读,似乎进程和“调度”没有太多关系,但是实际上,内核在进行线程调度的时候会去参照线程是否属于同一个进程(当其他条件都一样的情况下,比如,优先级等)。在业务应用开发中,若涉及线程相关,一般会将Woker线程数目设置为CPU的逻辑核数以便最大限度利用CPU。若没有上面提到的策略,这样的设置实际并没有太多意义(或者说设置更多的线程,从而有提高业务线程被调度的整体次数),因为一台服务器中不可能只存在业务的那几个线程。
操作系统提供了通用的调度能力,在某些特殊场景中,我们比操作系统更了解我们的线程该如何在多个CPU核之间进行分配。例如,在数据库系统中,为保证高优先级线程得到快速处理(比如,事务操作)、避免被其他线程中断(分片时间到)或者被迁移到其他CPU核(导致CPU Cache失效),会将相关线程与部分CPU核绑定,只留剩余的CPU核参与通用调度分配。
操作系统内核对CPU的绝对掌控
在详谈操作系统内核对线程调度之前,还想提一下最前置的问题,即操作系统能否获得调度的权利,会不会出现CPU核被应用程序长期占用的情形。在文章(操作系统知识之内核与进程学习总结)有提到&#x