Странное поведение microtime
На компьютере под Windows XP установлен PHP 5.2.17.17
Замечаю странное поведение функции microtime(). Ставил в коде метки для быстрого тестирования скорости выполнения MySQL запросов: Код:
$time=microtime(true); Код:
$a=time(); Гугл в решении проблемы не помогает, так как в основном находит проблему, когда горе программисты используют функцию microtime без параметра. Вместе с PHP тут установлен ZEND оптимизатор, не знаю имеет ли это значение, раньше никогда с ним не связывался. Откуда PHP берёт значение microtime? У операционной системы ведь? Может XP глючит? Какие есть теории? может кто-то сталкивался с подобной проблемой. UPD: Всё сильнее кошу на проказы операционной системы. Запустил скрипт в консоли через интерпретатор Денвера (того, что стоит на ноутбуке и работает без нареканий), но на данном компьютере. Проблема имеет место быть. Видимо, это вопрос уже не по PHP, но всё таки, может кто-то с таким сталкивался. |
Ответ: Странное поведение microtime
С незапамятных времён использую следующий класс собственного написания:
PHP код:
Испоьзование: PHP код:
PHP код:
1) старый через эксплод+эрэй_сум 2) новый через флаг в микротайме Я заметил, что на некоторых серверах второй вариант выдаёт дико неточный результат, а первый работает всегда железно, но он через-жопный (ну согласитесь, там же массивы волохаются) Попробуй у себя 2 варианта по очереди. Апд: Запустил твой код у себя на сервере: Цитата:
|
Ответ: Странное поведение microtime
Многоядерные процессоры они такие, у каждого ядра своё время ;)
|
Ответ: Странное поведение microtime
Randomize, про метод с explode знал, но да, он черезжопный. Я похожий класс сам использовал ранее, тоже с explode, а потом открыл для себя Америку, что в microtime оказывается можно передавать параметр. Сейчас попробую, возможно поможет. Но использовать такое решение постоянно не хочется.
SBJoker, при запуске PHP скрипта в консоли, он никогда у меня в диспетчере задач не отбирает более 50% процессора, поэтому я делаю вывод, что PHP во время выполнения юзает только одно ядро (на машине двухядерный процессор). |
Ответ: Странное поведение microtime
Протестировал вариант с array_sum(explode(" ", microtime()));
Выдаёт всё равно какие попало числа: 0.689378976822 0.689965963364 0.690943002701 1.8727850914 0.704999923706 0.704999923706 0.704999923706 0.704999923706 |
Ответ: Странное поведение microtime
На форуме softtime человек высказал предположение, что это совместный глюк Windows API и PHP засчёт того, что таймеры в винде итак не точные, а ещё и PHP тормозит. Я ответил:
Цитата:
|
Ответ: Странное поведение microtime
Цитата:
Я и неговорил что пхп исполняется многопоточно. Дело в том что отдавая команду "поспать" процессу ты выводишь его из очереди на выполнение, и в следующий раз он может быть с 50% вероятностью для двухядерного процессора исполнен другим ядром. А время ядер никогда не совпадает так точно. |
Ответ: Странное поведение microtime
Проблема возникает, даже без использования sleep и usleep.
Как можно решить эту проблему, если это она? Почему другие компы работают нормально? Я и раньше работал за этим компом, но это было давно, с тех пор там в нём много чего менялось, но процессор прежний. Раньше проблемы либо не было, либо я её не замечал (что маловероятно). UPD: Может можно как-то без негативных последствий отключить временно одно ядро и проверить останется проблема или нет? |
Ответ: Странное поведение microtime
Думаю, что дальнейшее обсуждение проблемы продолжу на форуме Softtime, там поактивнее люди обсуждают. Кому интересно, вот ссылка: http://softtime.ru/forum/read.php?id...id_theme=81781
Когда решу проблему, решение напишу и тут. |
Ответ: Странное поведение microtime
Цитата:
|
Ответ: Странное поведение microtime
Цитата:
Конфигурация компьютера: Система: Microsoft Windows XP Professional версия 2002 Service Pack 3 Компьютер: AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ 2.31 ГГц (уже 2.21 после смены настроек Биоса), 1.00 ГБ ОЗУ |
Ответ: Странное поведение microtime
В общем, вот решение проблемы от самого Майкрософта: http://support.microsoft.com/kb/895980/
Хотя там оно заявлено как "временное", то есть костыль. Но всё работает и глюков не заметил в течении 2 с половиной недель использования. |
Ответ: Странное поведение microtime
Спасибо! Буду иметь в виду.
|
Ответ: Странное поведение microtime
Цитата:
Из книги Дж. Рихтера Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows/Пер, англ - 4-е изд. - СПб; Питер; М.: Издательско-торговый дом "Русская Редакция", 2001. - 752 с.; ил. Цитата:
В остальном - Джокер первым верно указал проблему. |
Ответ: Странное поведение microtime
Прошу прощения ещё раз, но
Цитата:
понижения частоты ядер AMD Cool'n'Quiet и Intel SpeedStep, повышения частоты ядер AMD Turbo Core и Intel Turbo Boost. |
Часовой пояс GMT +4, время: 10:51. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot