我一直在努力理解两者之间的区别,因为它们适用于选择在某些CPU调度程序中运行的任务的不同算法。
在左侧放置所需时间最短的RB树并从左侧选择要运行的节点,以及将它们置于最短作业第一顺序的队列之间有什么区别?
答案 0 :(得分:1)
单个队列在搜索时具有O(1)的时间复杂度 [1] ,因为它只能弹出下一个要执行的进程。插入也有O(1),因为它将新项目放在队列的末尾。例如,使用这种循环调度器。在早期的Linux内核中。缺点是每次都以相同的顺序执行所有任务。
为了解决这个问题,一个简单的改进是用O(1)保持队列的头部弹出,并在插入时按优先级和/或时间要求搜索队列中的合适插槽,从而具有O(n)。一些调度程序保留多个队列(甚至是优先级队列),这些队列具有不同的操作时间,具体取决于实现和需求。
另一方面,红黑树的时间复杂度为O(log n),以便在插入时获得下一个进程和。红黑树的主要思想是它与每个操作保持平衡,因此保持高效而无需任何进一步的优化操作。也可以在内部使用红黑树实现优先级队列。
(Linux)调度程序的一个很好的起点是IBM网站上的CFS article,它也有一组很好的引用。