我有一個系統具有CPU昂貴的處理,但這不是時間關鍵。這個系統正在爲RESTful端點提供服務,這些端點對時間要求很高,並且在其他處理運行時往往會嚴重受阻。我想創建兩個線程池,一個具有高優先級線程,另一個具有低優先級,這樣無論其他處理如何,RESTful端點總是會很快。如何確保最高優先級的線程具有對CPU的最佳/最佳訪問?
我創造了這個實驗,試圖瞭解線程的優先級:
object RunMeX extends App {
val t1 = new Thread(SlowTask("A"))
t1.setPriority(Thread.MIN_PRIORITY)
val t2 = new Thread(SlowTask("B"))
t2.setPriority(Thread.MAX_PRIORITY)
val t3 = new Thread(SlowTask("C"))
val t4 = new Thread(SlowTask("D"))
val t5 = new Thread(SlowTask("E"))
t1.start
t2.start
t3.start
t4.start
t5.start
}
case class SlowTask(label:String) extends Runnable {
def run = {
val t = Timer()
var m = scala.collection.mutable.ListBuffer[Long]()
for(i <- 0 to 100; j <- 0 to 200) {
m += i*j
val n = m.map(_+1)
}
println(label+" ::: "+t.time)
}
}
case class Timer {
val now = new java.util.Date().getTime
def time = (new java.util.Date().getTime) - now
}
我還有一個線程比我做的CPU內核,以迫使一些優先級。輸出I 預計爲是低優先級的線程,顯然需要最長的時間,高優先級的線程明顯佔用最少的時間,剩下的兩個線程則處於中間的某個位置。我的實際結果顯示線程之間在性能上幾乎沒有什麼區別。
如何確保我的最高優先級線程(即,此處由t2表示的RESTful端點處理)始終具有對CPU的最佳/最佳訪問權限?