扭矩箱服务:漂亮吗?

Posted

技术标签:

【中文标题】扭矩箱服务:漂亮吗?【英文标题】:Torquebox services: niceness? 【发布时间】:2013-09-13 12:30:11 【问题描述】:

我正在考虑转移到 Torquebox,但我需要将我想要更改为服务的外部守护程序之一的 nice 级别设置为 19。在 Torquebox 中是否有任何等效的方法可以做到这一点,以便服务的运行时优先级比其他任何东西都低,尤其是 Torquebox 的“web”部分?

【问题讨论】:

【参考方案1】:

服务只是符合 API TorqueBox 的 PORO 可以使用。 TorqueBox 期望您在调用Service#start 后尽快让他的线程返回,这就是为什么服务通常在单独的工作线程中运行,您可以使用Thread#priority 设置工作线程的优先级(请参阅https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby#thread-priority) - 这Thread 相当于 nice

应该很简单:

class Service
  def start
    @worker = Thread.new do
      # do servicy stuff
    end
    @worker.priority = ...
  end

  def stop
    @worker.stop
  end

end

然而,Java 似乎在这方面遇到了一些依赖于操作系统的怪癖(请参阅Setting priority to Java's threads 和 Throttling CPU from within Java),而 JRuby 继承了这些怪癖。

考虑到这些怪癖,如果所有其他方法都失败了,您总是可以不时执行 sleep 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,这种方法并不像一开始听起来那么古怪。

【讨论】:

看起来 linux java 不允许你降低线程的优先级,除非你是 root ......这太可笑了。 不确定这是否可行,但对于其他阅读本文的人,您可能想尝试一下:tech.stolsvik.com/2010/01/…

以上是关于扭矩箱服务:漂亮吗?的主要内容,如果未能解决你的问题,请参考以下文章

微服务中的事务发件箱模式与 ChainedKafkaTransactionManager

text 使自由服务箱成为一个环节

javascript 工作箱 - 服务工作者缓存

python开发的gui漂亮吗

谷歌工作箱 webpack 插件在服务工作者之前首先从缓存中获取

验证 stomp Web 套接字客户端