延時毫秒級別再繼續運行的方法探討

 

                 在php 當中實現毫秒級別的延遲執行可以使用usleep 來實現,但是在執行的過程中,該函數執行的記錄如下:

#! /usr/local/php/bin/php -q
<?php
$i=0;
$his_time=date("Y-m-d H:i:s");
while(1)
{
/*
for($i=0;$i<(100000*2);$i++)
   {
  $c=$i;
}
*/
if (isset($c_time))
   $his_time=$c_time;
$c_time=date("Y-m-d H:i:s");
if($c_time>$his_time)
  $i=0;

echo $c_time." ".$i."\n";
$i++;
usleep(20000);
}
?>

那麼每秒會打印44-46次$i 信息(單核,無超線程CPU 中);測試上跟實際的參數爲毫秒不相符,按正常來說會20秒打印一次結果。

這個結果在專門的4核心,8cpu 的測試結果一樣,都是打印43-50次結果。

那麼這樣來計算的話,要1秒執行5次,

usleep(200000),剛好打印5次,每秒。

那麼是否可以說明usleep 所帶的參數爲微秒爲單位的?20*1000 剛好20毫秒。

 

如果使用空循環來自己做的話,那麼這個循環就跟CPU 的核心數有很大的關係了。

 

單CPU:

#! /usr/local/php/bin/php -q
<?php
$j=1;
$his_time=date("Y-m-d H:i:s");
while(1)
{
for($i=0;$i<(100000*2);$i++)
   {
  $c=$i;
}
$j++;
if (isset($c_time))
   $his_time=$c_time;
$c_time=date("Y-m-d H:i:s");
if($c_time>$his_time)
  $j=1;
echo $c_time." ".$j."\n";
//usleep(200000);
}
?>

這個循環每秒最多打印9次。

如果是4核心8cpu 的話,那麼循環次數要*8 ,即100000*8

從以上的測試結果看,是否可以估計我們的cpu 的計算能力爲每秒100萬次/秒?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章