news 2026/8/29 5:52:23

操作系统调度、浏览器历史——使用线性表实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
操作系统调度、浏览器历史——使用线性表实现

操作系统调度中的线性表实现

在操作系统(如Linux内核)中,进程调度通常涉及队列(Queue),例如就绪队列(Ready Queue)用于管理等待CPU的进程。这是一种线性表的形式,遵循FIFO原则(或优先级变体)。根据需求(如频繁的进程插入、删除和优先级调整),操作系统内核更倾向于使用**链表(Linked List)**实现队列,而不是数组:

  • 原因:进程数量动态变化,插入/删除操作频繁(O(1)时间复杂度),链表避免了数组的元素移动开销和固定大小限制。数组在这种场景下容易导致碎片或溢出。
  • 示例:在多级反馈队列调度(MLFQ)或圆robin调度中,就绪队列常用单链表或双向链表,每个节点代表一个进程控制块(PCB)。优先级队列可能用数组索引的链表数组(bucket queuing)。
  • 实际应用:如在操作系统概念书中,Ready Queue常用链表来允许进程在队列间移动。 现代OS如Linux的CFS调度器也使用红黑树(树形结构,但基础队列部分仍借鉴链表动态性)。
如果进程数固定且少,数组实现(如循环队列)可能用于简单嵌入式系统,但主流桌面/服务器OS优先链表以优化性能和内存。

浏览器历史中的线性表实现

浏览器历史(Back/Forward功能)通常用两个栈(Stacks)实现:一个后退栈(存储已访问页面),一个前进栈(存储前进页面)。这也是线性表的特殊形式,遵循LIFO原则。
实现方式根据浏览器而异,但现代浏览器更常用**动态数组(Dynamic Array,如C++的std::vector或Java的ArrayList)**而不是纯链表:

  • 原因:历史记录数量有限(通常数百条),动态数组支持高效的push/pop(摊销O(1)),且允许随机访问(如查看历史列表)。链表虽灵活,但缓存不友好,现代CPU更青睐数组的连续内存。内存开销也较低。
  • 示例:在设计题中,常建议用双向链表(Doubly Linked List)模拟,因为它便于在历史中“跳转”(forward/back)。 但实际浏览器如Chrome或Firefox,使用自定义数组结构或deque(双端队列,常基于数组),以平衡性能和内存。
  • 实际应用:当你后退时,从当前栈pop并push到前进栈;前进反之。数组实现简化了历史持久化(如保存到数据库)。

总体上,选择取决于具体需求:如果强调动态性和频繁操作,链表更好;

如果大小可控且需高效访问,数组优先。

在C语言实现中,可以根据场景灵活选择(如用malloc动态数组模拟vector)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 2:07:28

【netty】EventLoop

eventloop 可以处理channel上 accept、read、write等io事件1.单线程执行器2.维护了一个selector如果传入线程数,则使用传入的线程数如果没有传入线程数,则获取配置的线程数 与 系统的cpu核数*2 比大小防。 止存在0线程的情况,所以与1比大小&a…

作者头像 李华
网站建设 2026/8/27 11:38:41

GLM-4.7-Flash参数详解:flash-attn2启用条件、量化选项与推理精度权衡

GLM-4.7-Flash参数详解:flash-attn2启用条件、量化选项与推理精度权衡 1. 模型基础认知:不只是“更快的GLM-4” 你可能已经听说过GLM-4系列,但GLM-4.7-Flash不是简单的小版本迭代。它是一次面向实际部署场景的深度重构——目标很明确&#…

作者头像 李华
网站建设 2026/8/23 12:55:52

GLM-4-9B-Chat-1M代码补全:vLLM支持的IDE插件开发

GLM-4-9B-Chat-1M代码补全:vLLM支持的IDE插件开发 1. 引言 作为一名长期在AI和智能硬件领域工作的工程师,我经常需要处理复杂的代码项目。最近在开发一个大型Python项目时,遇到了一个典型问题:当代码文件超过几千行后&#xff0…

作者头像 李华
网站建设 2026/8/27 6:43:16

【MySQL】SELECT 优化

文章目录WHERE 条件优化范围优化单部索引范围访问多部索引范围访问索引合并优化三个概念索引下推 (ICP) 优化辨析 IPC 和索引合并和 BTREE 索引外连接优化ORDER BY 优化使用索引进行 order byGROUP BY 优化为什么聚合函数中使用索引列更高效函数调用优化总结避免索引使用不当加…

作者头像 李华