declare 实例

一个使用php做多进程的例子
 PHP   is   not   multithreaded.   The   "Ticks"   feature   is   a   way   to   get   some   of   the   benefits   of   multithreading.  
   
  <?  
  function   foo($str)   {  
                  static   $i   =   0;  
   
                  print   "$str:   $i<br>/n";  
                  $i++;  
  }  
   
  register_tick_function("foo",   "count");  
   
  declare   (ticks   =   6)   {  
   
          for($i=0;   $i<20;   $i++)   {  
                  echo   "$i<br>/n";  
          }  
   
  }  
  ?>      
     
   
  Output:    
  0  
  1  
  2  
  count:   0  
  3  
  4  
  5  
  count:   1  
  6  
  7  
  8  
  count:   2  
  9  
  10  
  11  
  count:   3  
  12  
  13  
  14  
  count:   4  
  15  
  16  
  17  
  count:   5  
  18  
  19  
  count:   6  
   
根据
1
<?  
  /*   定义一个函数   */  
  function   foo($str)   {  
                  static   $i   =   0;  
   
                  print   "$str:   $i<br>/n";  
                  $i++;  
  }  
  /*   将此函数声明为一个时间触发器   */  
  register_tick_function("foo"   /*   函数名   */,   "count"   /*   传递给函数foo的参数   */);  
   
  declare   (ticks   =   6   /*   触发时间间隔   */)   {  
          /*   以下为主流程代码   */  
          for($i=0;   $i<20;   $i++)   {  
                  echo   "$i<br>/n";  
          }  
   
  }  
  ?>      
   
  整个程序即为,在打印从0--20的过程中,每6秒执行一次函数foo.  

2
ticks=int   i  
  这个i的单位绝对不可能是秒!这个程序重结果来看,它将foo函数的调用和declare块中的执行分为两个不同的线程,事实上它确实模拟出了一点多线程 的效果(只是一点),我没有弄懂N   low-level   statements很清晰的意思,但是单位不该是秒,如果是秒,6秒才调用一次,那么我们要看到这个程序的完整效果该用多少秒呢,打印了7次,42秒! 但是事实上我们在浏览器中一敲回车,结果就出来了。所以我更相信这个6是6毫秒。  
   
  其实单位是“秒”还是其他什么都是还是次要的,关键在于指定了ticks的值意味着什么,在JAVA中sleep(time),time被指定为当前线程休眠毫秒数,但是在这里我认为是另外的意思,试着把程序改一下:  
  ticks=1,ticks=2,ticks=3……到ticks=10的结果都有什么不同,如果把ticks改的再大点,你会发现foo函数根本不被执行。  
  我得出了一点结论:ticks规定了declare   块中的代码的单位执行时间,如果在单位执行时间内没有将代码执行完,就执行注册的另一个函数,下次接着执行,直到declare   块的代码被执行完。  
  将ticks改成大值后,块中的代码一次就可以执行完,所以foo就不用执行了,上面的例子也是这样的,count   6打印完了,程序就结束了。
foo()的单位执行次数和ticks的值有什么关系??

3
请注意,PHP是解释执行的,所以tick=n是指执行了n条low-level语句就调用  
  所定义的函数。  
  从解释执行low-level来看,下面的语句实际上是38条语句,而每执行6条就调用定义  
  的函数,如果最后不足6条,还是会调用。  
  for($i=0;   $i<20;   $i++)   {  
        echo   "$i<br>/n";  
  }  

http://topic.csdn.net/t/20010725/03/208043.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值