Torquebox服务:好看吗?

时间:2013-09-13 12:30:11

标签: torquebox nice

我正在考虑转移到Torquebox,但是我需要设置一个外部守护进程的优秀级别,我希望将其更改为服务为19.在Torquebox中是否有任何等效的方法,以便服务的运行时间优先级低于其他任何东西,尤其是Torquebox的“web”部分?

1 个答案:

答案 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-prioritySetting 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,这种方法并不像最初听起来那样古怪。