IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:调度算法

共 4 篇相关文章

IT 累计浏览 2,493

你需要更多的思考时间

这篇文章分享了一位技术从业者通过每日安排固定思考时间,来提升工作效率和生活质量的个人实践。作者每天七点半起床,利用通勤的一个半小时用kindle阅读,并提前一小时到公司,但这段时间他并不急于

IT 累计浏览 3,437

操作系统-进程管理

这篇系统梳理了操作系统进程管理的核心概念。作者从最基础的定义切入,指出进程是程序的一次动态执行过程,并详细对比了它与静态程序在存在形式、生命周期、资源分配角色上的五大关键差异。 文章接着拆解了进程的内部构成,重点呈现了进程状态的演进——从经典的三种状态模型,到更贴近实际的五种、七种状态切换图,这直观反映了现代操作系统对进程调度的精细化控制。在调度层面,文章清晰列举了先到先服务、优先级、最短作业优先、循环轮转以及多级队列这五种经典算法,为理解CPU资源如何公平高效地分配给不同进程提供了具体思路。 此外,文章也涵盖了进程间通信的七种主要方式(如管道、共享内存、套接字等),并最终引向了更轻量的执行单元——线程,明确了进程与线程在资源分配与调度层面的分工关系。整篇内容结构清晰,从定义到组件,再到调度与通信,最后延伸到线程,为构建操作系统进程管理的完整知识图谱提供了扎实的路线。

IT 累计浏览 2,012

Erlang公平调度的误解

这篇讲的是Erlang引以为傲的“公平调度”哲学,在实际工程中可能并不像想象中那么完美。作者从Erlang虚拟机(BEAM)的时间片分配、抢占式调度说起,点明了它在云计算等场景下保障用户体验的初衷。 但文章的重点在于“祛魅”。作者指出,尽管Erlang的BIF、NIF等模块都在努力维护公平,但一些基础设计环节却可能无意中打破这种平衡。例如,消息队列的无保护单向队列结构,在极端负载下可能导致队列暴增和内存激增;而内存分配器在向系统申请内存时使用的锁,以及SMP架构下难以避免的锁竞争,都可能成为公平性的破坏者。文章最终总结,这些实现细节上的“坑”影响了Erlang在某些情况下的公平性表现,也解释了为何近期Erlang引入dirty scheduler等新机制来应对。 作者最后将视角拉高,提醒架构师需从上到下,在业务层面也进行“公平”设计,才能与系统哲学和谐统一。世界没有绝对公平,但理解其边界至关重要。

IT 累计浏览 2,250

CFS中的虚拟运行时间

这篇讲的是Linux内核CFS调度器中最核心也最容易让人困惑的一个概念:虚拟运行时间(vruntime)。作者从对vruntime的不理解出发,在研究cgroup的CPU子系统时,才真正理清了它的原理。 CFS追求的是理想中的“完全公平”,但现实中同一时刻一个CPU核心只能跑一个进程。因此,算法需要一种机制来惩罚当前占用CPU的进程,从而照顾那些等待的进程。这个机制,就是vruntime。简单说,vruntime越小的进程,越值得被调度。 它的精妙之处在于计算方式:vruntime并非进程实际运行的时间,而是结合了进程“权重”后的换算值。权重越大(对应用户态优先级nice值越低),进程实际运行一毫秒所产生的vruntime就越小,这样它在调度队列中的位置就越靠前(内核用一棵红黑树管理,vruntime小的在左端),从而获得更多的CPU时间。 文章还揭示了内核是如何将用户熟悉的nice值映射到内部权重的,那就是通过一个叫`prio_to_weight`的静态数组进行转换。这套机制将“优先级”这个概念,巧妙地转化为“需要运行的紧迫度”,从而在动态调度中实现了对不同重要性进程的公平分配。