Разработчику. Сборник рецептов PHP
Задавайте вопросы

Выработка высокоточного времени

Вернуться назад

Задача

Необходимо измерять время с более чем секундной точностью, например для того, чтобы сгенерировать уникальный идентификатор.

Решение

Это можно сделать при помощи функции microtime():

list($microseconds,$seconds) = explode(' ',microtime());

Обсуждение

Функция microtime() возвращает строку, содержащую дробную часть времени, прошедшего с начала эпохи, с точностью до микросекунды. Например, возвращенное значение 0.41644100 1026683258 означает, что с начала эпохи прошло 1026683258,41644100 секунд. Вместо числа с двойной точностью возвращается строка, поскольку число с двойной точностью не настолько велико, чтобы хранить полное значение с микросекундной точностью.

Значение времени, содержащее миросекунды, удобно для генерирования уникальных идентификаторов. Объединение его с идентификатором текущего процесса гарантирует получение уникального значения, поскольку процесс не может генерировать более одного идентификатора за одну микросекунду:

list($microseconds,$seconds) = explode(' ',microtime());
$id = $seconds.$microseconds.getmypid();

Однако этот метод не так надежен в многопотоковых системах, где существует небольшая (но отличная от нуля) вероятность, что два потока одного процесса одновременно вызовут функцию microtime().

Документацию по функции microtime() смотрите на http://www.php.net/microtime.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ