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

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

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

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

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

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

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

Оцените статью: (0 голосов)
0 5 0

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

Вернуться в раздел: PHP / 3. Дата и время