我正在考虑转移到Torquebox,但是我需要设置一个外部守护进程的优秀级别,我希望将其更改为服务为19.在Torquebox中是否有任何等效的方法,以便服务的运行时间优先级低于其他任何东西,尤其是Torquebox的“web”部分?
答案 0 :(得分:1)
服务只是符合API TorqueBox可以使用的PORO。 TorqueBox希望您在调用Service#start
后尽快返回其线程,这就是为什么服务通常在单独的工作线程中运行,您可以使用Thread#priority
设置工作线程的优先级(参见{{ 3}}) - Thread
等同于nice
应该如此简单:
class Service
def start
@worker = Thread.new do
# do servicy stuff
end
@worker.priority = ...
end
def stop
@worker.stop
end
end
但是,Java似乎在这方面遇到了一些与操作系统相关的问题(参见https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby#thread-priority和Setting priority to Java's threads),JRuby继承了这些怪癖。
考虑到这些怪癖,如果所有其他方法都失败了,你总是可以偶尔睡眠0.01,然后错开执行一点并为其他工作提供CPU时间,你可以确定地做到这一点(sleep 0.01 if count%100==0
)或你可以非确定性地做同样的效果和更简单的代码(sleep 0.01 if random(100)==0
) - 并使用确切的数字(1,10,100,1000,...),
据我所知,EventMachine在反应堆线程中使用sleep 0.01以防止钉住CPU,这种方法并不像最初听起来那样古怪。