我有一个系统具有 CPU 昂贵的处理能力,但这不是时间关键的。同样的系统正在为 RESTful 端点提供服务,这些端点对时间要求很高,并且在其他处理运行时往往会严重陷入困境。我想创建两个线程池,一个具有高优先级线程,另一个具有低优先级,这样无论其他处理如何,RESTful 端点都将始终保持敏捷。
我创建了这个实验来尝试了解线程优先级:
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 内核多一个,以强制确定优先级。我期望的输出是低优先级线程显然花费的时间最长,高优先级线程显然花费的时间最少,剩下的两个线程在中间的某个地方。我的实际结果显示线程之间的性能几乎没有差别。
如何确保我的最高优先级线程(即 RESTful 端点处理,此处由 t2 表示)始终具有对 CPU 的第一/最佳访问权限?