2012-06-29 66 views
0

我正在執行任務處理服務,我想管理服務的質量,給予某些類型的任務更高的優先級。有四種類型的任務,因此我將使用四個隊列,每個任務類型一個。如何管理處理任務中的服務質量?

  • 爲方便創建四個處理線程(每個隊列一個)併爲其分配不同的優先級?
  • 或者我應該讓處理線程主要關注高優先級的隊列嗎?
  • 還有其他方法嗎?
+0

這種事情真的沒有普遍的答案。過多的問題取決於你將要運行的硬件類型(例如,多少個處理器/內核)以及這些任務如何並行化。 – DGH

+0

這些任務是相互獨立的(即使是那些相同類型的)。使用優先級,我應該確保在特定的時間間隔內,處理(特定類型的)任務的數量與其優先級成正比(假設隊列中有相同數量的任務)。 – enzom83

回答

1

我建議有一個負責抓取任務的單線程。

有很多很多可能的策略。一個只是有4個隊列,並嘗試在它們之間循環。另一種方法是將任務粘貼到優先級隊列中(通常使用堆數據結構實現),但如果這樣做,那麼請注意,所有較高優先級的任務都將在任何較低優先級的任務之前執行。三分之一是使用基於年齡的優先級隊列,因此您可以先取得最舊的請求 - 然後人爲提出高優先級的請求。 (我可以建議隊列中最古老的東西的年齡加上一個常數項。)

要牢記一點。如果您分配足夠的容量,您的隊列可能會保持相當短的時間。如果你的能力不足,那麼隊列將無限制地增長,並且從長遠來看,你可以將排隊問題視爲分類而不是優先級。但是如果可能的話,它往往能夠很好地提高容量,而不是在優先級方面很聰明。