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

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

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

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


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

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


Однако этот метод не так надежен в многопотоковых системах, где существует небольшая (но отличная от нуля) вероятность, что два потока одного процесса одновременно вызовут функцию microtime().
Теги:
точностью, microtime, seconds, microseconds, поскольку, одного, процесса, эпохи, начала, времени, explode, чтобы, метод, гарантирует, велико, хранить, миросекунды, удобно, генерирования, идентификаторов, идентификатором, текущего, вызовут, одновременно, потока, уникального, вероятность, Однако, значения, процесс, может, генерировать, настолько, существует, системах
Добавлено: 21 Июля 2018 07:01:54 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...