【发布时间】:2015-03-02 20:06:41
【问题描述】:
Linux 内核对 TCP 使用链表,对进程调度使用 RB 树。
就算法效率而言,这些是有道理的。您将一次收到一堆数据包,因此在列表末尾插入 O(1) 非常好。
对于进程调度,完全公平调度器使用红黑树,选择任务的时间为 O(1)。
据我所知,这些都不是以“平面”方式实现的——链表是一堆带有指向其他节点的指针的节点,就像树一样。这意味着据我所知,这些结构的位置应该很差。
据我所见,缓存局部性通常比算法效率更重要。
Linux 所针对的数据集是否有某些东西使得这些结构的算法效率超过了其他结构的缓存效率?
我是不是误会了什么?有人介绍过吗?
【问题讨论】:
-
先生。 Torvalds,你的回应是什么?
-
不同架构的缓存行大小差异很大。
-
是的。但是内核真的针对纯平面内存模型进行了优化吗?
标签: c performance linux-kernel