microtime() - кеширует или косячит?

sverel

Новичок
Делаю
PHP:
for ($i=0; $i<10; $i++) {
  echo sprintf('%.7f', microtime(true)).'<br/>';
  usleep(10); // Поспать 10 мкс.
}
В результате, пять раз получаю одно и тоже число; потом ещё пять раз другое число. Вывожу с точностью до 7 знаков. Если поставить usleep(1000); - то получаю десять разных чисел.


От чего это зависит? Какой-то внутренний кеш? Но нафига тогда нужна такая ф-ция... Протестил на 4-х других серверах с разными ОС и проблему не встретил. Это мне дали облачный хостинг потестить. Debian 6, PHP 5.3.3.7.
Сегодня сервер усох на 3/4 и не корректная работа наблюдается, только если убрать usleep(). Но если поставить хотя бы usleep(1); то всё нормально.
 

fixxxer

К.О.
Партнер клуба
>> Это мне дали облачный хостинг потестить.

Вот у них и спроси. На виртуалках часто бывают странности с системным таймером.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
помню, на VPS на virtuozzo были неточно выставлены системные часы, а обновить по ntpdate прав не было
 

sverel

Новичок
Дело не в точности относительно GMT. А в том что постоянно одно и тоже время.
$x1 = microtime(true);
usleep(50);
$x2 = microtime(true);

В результате $x1 = $x2.
 

tony2001

TeaM PHPClub
PHP ничего не кэширует, там используется системный вызов.
что он возвращает - то ты и получаешь.
 

fixxxer

К.О.
Партнер клуба
У меня под какой-то старой то ли вмварью толи виртуалбоксом вообще с системным временем в линуксе хер знает что творилось, пока не пересобрал ядро с HZ=100. Тикать оно, видать, не успевало :)
 
Сверху