Linux内核之于红黑树and AVL树

简介:
为什么Linux早先使用AVL树而后来倾向于红黑树?
       实际上这是由红黑树的实用主义特质导致的结果,本短文依然是形而上的观点。红黑树可以直接由2-3树导出,我们可以不再提红黑树,而只提2-3树,因为 2-3树的操作太简单。另外,任何红黑树的操作和特性都可以映射到2-3树中。因此红黑树和AVL树的比较就成了2-3树和AVL树的比较。
       它们俩的区别在哪?2-3树的平衡是完美平衡的,但是树杈数量却可以是3个,而AVL树差一点点就完美平衡的标准二叉树,它只允许子树的高度差最多为1。 可见这么看来,2-3树比AVL树更加平衡,但是2-3树转换为二叉树,即红黑树的时候,它就不再能保持完美平衡了,因为三叉节点要分割出来一个红色节 点,使得子树高度加1,这么看来,红黑树在严格意义上完全没有AVL树平衡!
       AVL树在每一次插入删除时都要保持它那“差一点点的平衡”,而红黑树则只需要不扰动黑色节点即可,以2-3树来讲,它毕竟是牺牲了二叉树的标准特性变成 三叉树保持平衡的。可见,红黑树的插入/删除开销远小于AVL树,对于查询开销,理论上,更加平衡的AVL树要比红黑树好(因为对于2-3树,遇到三叉节 点,你需要比较2次),但是,红黑树的2倍树高的不平衡状态是一个小概率事件!因此对于正常情况,你可以认为AVL树和红黑树的查询开销是一样的,总之, 常规情况下,红黑树要好于AVL树。
       AVL树太理想了,而Linux内核中的数据结构,特别是虚拟内存管理模块,尤其是CFS调度器的task对列,它们是会被频繁插入删除的,因此选择了红黑树而不是AVL树。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1668766


相关文章
|
9天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
28天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
30 0
|
28天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
7天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
18 3
|
14天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
17天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
13 1
|
24天前
|
存储 网络协议 Linux
【Linux 解惑 】谈谈你对linux内核的理解
【Linux 解惑 】谈谈你对linux内核的理解
22 0
|
28天前
|
存储 Linux Shell
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
24 0
|
28天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 向内核中加载指定的模块 insmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 向内核中加载指定的模块 insmod命令 使用指南
29 0
|
28天前
|
存储 运维 Linux
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南
32 0
【Shell 命令集合 系统设置 】⭐Linux 显示Linux内核环缓冲区的内容 dmesg命令 使用指南