cpu_get_usage в php?

Я создал класс тестов, который позволяет пользователю вставлять, например

$timer->checkpoint('1'); 

проверить код на время, потребление памяти и т. д. и в конце кода, если он / она хочет проверить это, он / она должен вставить

 $result=$timer->result(); 

это дает некоторые данные для результата публичной функции (), например, использования памяти (с использованием memory_get_peak_usage) и времени (microtime ()).

Все это прекрасно для меня.

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

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

Solutions Collecting From Web of "cpu_get_usage в php?"

Ненавижу, чтобы ответить на мой собственный вопрос, но я провел много исследований, и здесь я иду … В основном, что я сделал, это …

  $dat=getrusage(); foreach ($dat as $key => $val) { $usertime= $dat['ru_utime.tv_usec']; $systemtime= $dat['ru_stime.tv_usec']; $finalresultcpu= ($systemtime + $usertime); } $this->_cpuTrackers[$name]=$finalresultcpu; return $this; } 

Как вы можете видеть, я использовал встроенную функцию getrusage php. Который выдает массив с целым рядом сведений, из которых большинство было для меня совершенно бесполезным, за исключением ru_utime.tv_usec (пользовательское время) и ru_stime.tv_usec (системное время). Чтобы узнать, сколько энергии процессора потребляется, нам нужно посмотреть значения «пользовательское время» и «системное время», и, как вы можете видеть в коде, добавьте его, чтобы получить время, которое на самом деле является использованием процессора.

 function cpu_usage(){ static $R=0; $r=$R; $R=getrusage(); $R= $R['ru_utime.tv_sec']*1000000+$R['ru_utime.tv_usec']+ $R['ru_stime.tv_sec']*1000000+$R['ru_stime.tv_usec']; return $R-$r; } 

Применение:

 cpu_time(); // optionally initiating, to measure time from this point, // not from the script's beginning // doing some stuff here echo cpu_time()." elapsed\n"; // doing yet some stuff here echo cpu_time()." elapsed\n"; 

В простых случаях он дает то же самое, что и microtime , но с меньшей точностью. Та же функция для microtime :

 function stopwatch(){ static $time=0; $prev=$time; $time=microtime(true); return $time-$prev; } 

Грубо, не использовать так:

 stopwatch(); f(); // some function, which calls `stopwatch` in itself too echo stopwatch();