详解操作系统内核对线程的调度算法

本文探讨了操作系统内核如何调度线程,通过类比超市收银和银行叫号系统阐述线程调度的重要性。文章介绍了操作系统调度的基础,如进程与线程的关系,并讨论了如何在多核CPU中优化线程分配。接着,详细讲解了多种调度算法,包括FIFO、SJF、时间片轮转、最大最小公平算法和MFQ,并分析了它们的优缺点及适用场景。最后,讨论了多CPU核场景下的调度策略,如Gang Scheduling和Space Sharing,以及如何利用CPU Cache优化性能。
摘要由CSDN通过智能技术生成

操作系统内核对线程的调度非常有意思,因为他的一系列思想和方法论都能从生活和业务开发中找到影子,比如:

  • 超市收银台会分多个收银通道,快速通道针对那些提篮子的客户,慢速通道针对那些推购物车的客户,从而减少提篮子客户的付款等待时间。设想一下,若某个客户只买了几件物品,但是不巧正好排到了购买了一车物品的客户后面,他可能会很失去耐心。

  • 银行营业厅的叫号系统,他会按照VIP客户、普通客户分出多个号段的排队序号,VIP客户的响应速度会快一些,普通客户的响应速度会慢一些。

  • 在内容处理系统中,在处理能力一定的情况下,我们也会按照文章来源的不同进行调度处理,优先快速响应高优先级文章的处理。

  • 在融合存储系统中,会对不同业务的主机I/O请求设置不同的优先级,优先保证重要业务的I/O性能(并发和延迟)。

两个有意思的场景

  • 我们都知道:进程是操作系统进行”资源分配“的基本单位,线程是操作系统进行“调度”的基本单位,从这句话的字面解读,似乎进程和“调度”没有太多关系,但是实际上,内核在进行线程调度的时候会去参照线程是否属于同一个进程(当其他条件都一样的情况下,比如,优先级等)。在业务应用开发中,若涉及线程相关,一般会将Woker线程数目设置为CPU的逻辑核数以便最大限度利用CPU。若没有上面提到的策略,这样的设置实际并没有太多意义(或者说设置更多的线程,从而有提高业务线程被调度的整体次数),因为一台服务器中不可能只存在业务的那几个线程。

  • 操作系统提供了通用的调度能力,在某些特殊场景中,我们比操作系统更了解我们的线程该如何在多个CPU核之间进行分配。例如,在数据库系统中,为保证高优先级线程得到快速处理(比如,事务操作)、避免被其他线程中断(分片时间到)或者被迁移到其他CPU核(导致CPU Cache失效),会将相关线程与部分CPU核绑定,只留剩余的CPU核参与通用调度分配。

操作系统内核对CPU的绝对掌控

在详谈操作系统内核对线程调度之前,还想提一下最前置的问题,即操作系统能否获得调度的权利,会不会出现CPU核被应用程序长期占用的情形。在文章(操作系统知识之内核与进程学习总结)有提到&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值