Я написал демон, который был структурирован следующим образом:
while( true ) {
// do some stuff
Thread.sleep( 1000 );
}
Я заметил, что он использует очень большое количество CPU - до 100%. У меня был похожий демон на моих рабочих серверах в течение нескольких месяцев с той же проблемой с процессором.
Вчера я переделал код, чтобы использовать TimerTask. Сразу же я заметил, что использование CPU снизилось на моем dev box. Поэтому я решил развернуть код на продакшене и перепроверить его с помощью Munin. Вот графики:
Пара моментов:
Итак: почему Thread.sleep так неэффективен по сравнению с TimerTask?