延时毫秒级别再继续运行的方法探讨

 

                 在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万次/秒?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值