2013-12-12 3 views
0

Я хочу преобразовать метку времени в секундах в метку времени в миллисекундах. Ниже мой наивный подход.java convert timestamp в секундах до отметки времени в миллисекундах

if(timestamp < 10000000000) { 
    timestamp = timestamp * 1000L; 
} 

К сожалению, я должен поместить этот код на сервер, который получает тысячи запросов каждую минуту. Поэтому я хочу сделать это сравнение как можно быстрее.

У меня есть несколько вопросов:

  1. Как дорого это наивный подход?
  2. Есть ли более быстрый способ справиться с этим?
+4

Вы определили, что это на самом деле узкое место в производительности по сравнению с остальными функциями вашего приложения? –

+0

'if' с умножением и хранением? Я ожидал бы, что это будет недорого и очень быстро. Вы измеряли какие-либо проблемы с производительностью? –

+0

Весь сервер выполняет запрос получения и сохраняет данные запроса. Мы доверяем нашим клиентам, что они не будут отправлять фолы. Таким образом, в настоящее время нет никакой обработки данных. Это первый раз, когда мы обрабатываем данные на сервере. – riship89

ответ

0

Насколько дорог наивный подход?

Условие займет около 1 нс, а * 1000L займет около 3 нс. Так что всего около 4 нс. Если вы делаете это 250 миллионов раз в секунду, у вас есть проблема. Несколько тысяч в секунду я бы не волновался.

Есть ли более быстрый способ справиться с этим?

Я уверен, что это аренда ваших проблем с точки зрения производительности. Я бы использовал процессор и измерил, где ваша проблема, а не гадать.

+0

Я не согласен с вашими цифрами ... латентность умножения - это 3 цикла на моем старом Core i5, что означает около 1 нс (при этом остается место для ILP). Условие почти бесплатное, если его можно предсказать, в противном случае это может стоить несколько циклов (17 циклов на Core i7, как написано [здесь] (http://www.programcreek.com/2012/12/amd-versus-intel- Успехи и недостатки своих процессоров-архитектуры-2-bulldozer-and-sandy-bridge-сравнения)), т. е. около 5 нс. Я согласен с вашим заключением. – maaartinus

+0

Конечно. Я поставлю некоторые секундомеры в соответствующих местах в своем коде и проверю, насколько это влияет на время, затраченное на запрос. Думаю, я должен был это сделать раньше. Я буду комментировать после того, как мои эксперименты будут выполнены. До тех пор я просто закрою этот вопрос. – riship89

+0

@ riship89 Временные марки занимают около 35 нс в лучшем случае (около 9-кратного кода, который у вас есть), поэтому измерить его довольно сложно. –

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