2013-09-13 4 views
0

Я рассматриваю возможность перехода на Torquebox, но мне нужно установить хороший уровень одного из внешних демонов, которые я хочу изменить на службу, до 19. Есть ли эквивалентный способ сделать это в Torquebox, чтобы служба имеет более низкий приоритет времени выполнения, чем что-либо еще, особенно «веб-часть» Torquebox?Услуги Torquebox: приятность?

ответ

1

Услуги - это только ПОРО, соответствующие API TorqueBox, с которыми можно работать. TorqueBox ожидает, что вы вернете его поток как можно скорее после звонка Service#start, поэтому услуги обычно запускаются в рамках отдельных рабочих потоков, и вы можете установить приоритет рабочего потока с помощью Thread#priority (см. https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby#thread-priority), что соответствует эквиваленту Threadnice

Должно быть так же просто, как:

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 наследует эти причуды.

Имея эти причуды в виду, если все остальное терпит неудачу, вы всегда можете делать сон 0.01 каждый раз, чтобы немного пошатнуть выполнение и получить процессорное время для других заданий, вы можете сделать это детерминистически (sleep 0.01 if count%100==0), или вы можете сделать это не детерминистически для почти такого же эффекта и более простого кода (sleep 0.01 if random(100)==0) - и играть с точным числом (1, 10, 100, 1000, ...),

Насколько я могу судить, EventMachine использует sleep 0.01 в потоке реактора, чтобы предотвратить привязку CPU, этот подход не так диковинтен, как кажется на первый взгляд.

+0

выглядит как linux java, не позволяет вам понижать приоритет в потоке, если вы не являетесь пользователем root .... это довольно чертовски смешно. –

+0

не уверен, что это сработает, но для кого-либо еще, читающего это, вы можете попробовать: http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html –

Смежные вопросы