雖然通常都是將發(fā)送給打印機的作業(yè)放進隊列里,但這并不是最好的做法。比如
- 作業(yè)A可能非常重要,期望的是只要有打印機可用,就立馬運行作業(yè)A。
- 當打印機可用時,如果有若干個1頁的作業(yè),和一個100頁的作業(yè)。比較合理的做法是讓最長作業(yè)最后運行,即使該作業(yè)不是最后提交的。
在一個多用戶環(huán)境中,操作系統(tǒng)調(diào)度器必須從多個進程中選擇一個來運行。通常,一個進程只允許運行一段固定的時間。假如調(diào)度算法使用的是隊列,實行的策略是作業(yè)最初是被放在隊列的末尾;調(diào)度器會重復地取隊列的第一個作業(yè)來運行,直到要么該作業(yè)完成了,要么時間耗盡了,該作業(yè)還沒完成,就將它放到隊列的末尾。這種策略通常是不合適的,因為由于要等待運行,非常短的作業(yè)似乎要花費很長時間。通常,短時作業(yè)應該盡可能快地完成,優(yōu)先級要比正在運行的某些作業(yè)高。而且,有些作業(yè)雖不是短時作業(yè),但也應該有優(yōu)先級。
這類特殊的應用似乎需要一種特殊的隊列:優(yōu)先級隊列。
在本章,我們將討論:
- 抽象數(shù)據(jù)類型優(yōu)先級隊列的一種有效實現(xiàn);
- 優(yōu)先級隊列的幾種用法;
- 優(yōu)先級隊列幾種高級實現(xiàn);
- 本章中將看到的數(shù)據(jù)結(jié)構(gòu)是計算科學中最優(yōu)雅的數(shù)據(jù)結(jié)構(gòu)之一;