Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Время (Time) вопросы


Автор: Tony 24.10.2014, 15:31
Привет всем. Есть ряд вопросом по времени.
  • Как быстр System.currentTimeMillis() ? Если нужно часто вызывать его, отражется ли на перформансе ? 
  • В аппликации нужно каждую секунду в 999 мил сек делать определёное дейстевие. Сейчас делаю так: 
    @Scheduled (cron="0/1 * * * * *")
     потом поток Thread.sleep (999) после этого делаю действие. Но это не совсем правильно. Какие есть варианты ?

Автор: LSD 24.10.2014, 18:15
Цитата(Tony @  24.10.2014,  16:31 Найти цитируемый пост)
Как быстр System.currentTimeMillis() ?

Зависит от платформы.

Цитата(Tony @  24.10.2014,  16:31 Найти цитируемый пост)
Если нужно часто вызывать его, отражется ли на перформансе ?

Да.


Цитата(Tony @  24.10.2014,  16:31 Найти цитируемый пост)
Но это не совсем правильно.

Это не "неправильно", это не работет. Thread.sleep (999) имеет погрешность не меньше одного кванта ОС, а то и больше - никто не гарантирует что твой поток получит квант прям сразу.
Единственный вариант это busy spin, но нужно чтобы у тебя было гарантированно свободное ядро.

Автор: Tony 25.10.2014, 12:23
busy spin - понятно, спасибо.
Цитата

Цитата(Tony @  24.10.2014,  16:31 Найти цитируемый пост)
Если нужно часто вызывать его, отражется ли на перформансе ?

Да.


Как тогда быть ? Как оптимизировать ? 

Автор: LSD 27.10.2014, 16:23
Цитата(Tony @  25.10.2014,  13:23 Найти цитируемый пост)
Как тогда быть ? Как оптимизировать ?

nanoTime() достаточно быстр. Но его еще нужно прявязать ко времени, и SMP системах на разных процессорах он может выдавать разное вермя, так что тут еще с affinity приедется заморачиваться.

В целом мне кажется, что или задача неправильно сформулирована или не правильно выбран инструмент.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)