В чем смысл утверждений о точности / точности часов? - PullRequest
3 голосов
/ 02 марта 2011

Я видел много обсуждений системных часов, где сказано, что, например, стандартные часы ПК под напр. Окна имеют точность всего +/- 10 мс, тогда как в режиме реального времени системные часы имеют точность до миллисекунды. Но что означают эти претензии? Насколько значительна эта временная изменчивость, полностью зависит от интервала измерения тактового сигнала. Если два последовательных вызова часов вернули метки времени, которые отличались на 10 мс, это было бы катастрофой, и, к счастью, это не так; но если часы теряют / набирают 10 мс в течение месяца, это практически идеальное время для любой практической цели. Чтобы сформулировать вопрос иначе, если я сделаю два тактовых вызова с интервалом в 1 секунду, какую степень погрешности я мог бы ожидать, скажем, для стандартного ПК-Windows, ПК-реального времени (например, QNX с mb, который его поддерживает), и Mac?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Ваш вопрос (ы) может привести к более широкому обсуждению. Когда вы говорите о временном интервале, в течение которого измеряются часы, я считаю, что это называется дрейфом. Если временные метки от двух последовательных вызовов часов отличались на 10 мсек, возможно, это заняло так много времени на обработку, возможно, произошло прерывание, возможно, часы дрейфуют так плохо, может быть, точность отчета в единицах 10 мс, возможно, есть ошибка округления и т. д. Точность сообщения системных часов зависит от их скорости (т. е. 1 ГГц = 1 нс), аппаратной поддержки и поддержки ОС. Извините, я не знаю, как Windows сравнивается с Mac.

0 голосов
/ 22 сентября 2011

Поскольку вы не ссылаетесь на какие-либо конкретные обсуждения по этой теме, я могу лишь передать тот небольшой опыт, который у меня есть по этой теме со стороны Java:

Гранулярность классического System.currentTimeMillis() было довольно плохо некоторое время назад (15 мс на Windows XP).Это означает, что наименьшая возможная разница между любыми двумя соседними вызовами System.currentTimeMillis(), которые не возвращают одно и то же значение, составляет 15 мс.Поэтому, если вы измеряете событие, которое занимает 8 мс, вы получите либо 0 мс, либо 15 мс в результате.

Для измерения небольших промежутков времени это явно катастрофично.Для измерения более длинных промежутков времени это на самом деле не проблема.

Это одна из главных причин, почему Java представила System.nanoTime, который был специально , предназначенный для измерения малого времениspans и обычно (то есть, когда ОС поддерживает это) имеет значительно более тонкую гранулярность (во всех системах, которые я тестировал на нем, никогда не возвращалось одно и то же значение дважды, даже когда вызывается двачисло раз подряд без вычислений между ними). ​​

Таким образом, современные компьютеры могут обычно обеспечивают довольно точное и точное измерение времени, при условии вы используете правильные API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...