一般用法是 declare(ticks=N);拿declare(ticks=1)来说,这句主要作用有两种:

  1、Zend引擎每执行1条低级语句就去执行一次 register_tick_function() 注册的函数。可以粗略的理解为每执行一句php代码(例如:$num=1;)就去执行下已经注册的tick函数。 一个用途就是控制某段代码执行时间,例如下面的代码虽然最后有个死循环,但是执行时间不会超过5秒。运行 php timeout.php

 <?php
declare(ticks=1); // 开始时间
$time_start = time(); // 检查是否已经超时
function check_timeout(){
// 开始时间
global $time_start;
// 5秒超时
$timeout = 5;
if(time()-$time_start > $timeout){
exit("超时{$timeout}秒\n");
}
} // Zend引擎每执行一次低级语句就执行一下check_timeout
register_tick_function('check_timeout'); // 模拟一段耗时的业务逻辑
while(1){
$num = 1;
} // 模拟一段耗时的业务逻辑,虽然是死循环,但是执行时间不会超过$timeout=5秒
while(1){
$num = 1;
}

  2、declare(ticks=1);每执行一次低级语句会检查一次该进程是否有未处理过的信号,测试代码如下:

 <?php
declare(ticks = 1); //每执行一次低级语句会检查一次该进程是否有未处理过的信号, //利用计时器发送一个SIGALRM信号
function signal_handler($signal){
print "Caught SIGALRM\n";
pcntl_alarm(5);
} pcntl_signal(SIGALRM, "signal_handler");
pcntl_alarm(5); while (1){
sleep(1);
}

  当然declare的效率是极低的,比较好的做法是去掉ticks,转而使用pcntl_signal_dispatch,在代码循环中自行处理信号. 具体参考:http://rango.swoole.com/archives/364

  优化上述例子:

 <?php
//declare(ticks = 1); //每执行一次低级语句会检查一次该进程是否有未处理过的信号,效率太低 //利用计时器发送一个SIGALRM信号
function signal_handler($signal){
print "Caught SIGALRM\n";
pcntl_alarm(5);
} pcntl_signal(SIGALRM, "signal_handler");
//5秒后发送信号
pcntl_alarm(5); while (1){
pcntl_signal_dispatch();
sleep(1);
}

  参考:http://blog.csdn.net/udefined/article/details/24333333

      http://rango.swoole.com/archives/364    

PHP declare(ticks=N); 的作用的更多相关文章

  1. PHP进程之信号捕捉中的declare(ticks=1)

    转自:http://blog.csdn.net/gavin_new/article/details/65629223 一. 语句在php中的意义 php中,declare(ticks=n)和regis ...

  2. php declare (ticks = N)

    A tick is an event that occurs for every N low-level tickable statements executed by the parser with ...

  3. [PHP]PHP中申明 declare(strict_types=1)的作用

    strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验哪个文件写了declare,哪个文件中的所有代码就需要检查 declare(strict_types=1); ...

  4. php socket 编程问题总结

    1. PHP declare(ticks=N); 的作用 https://blog.csdn.net/udefined/article/details/24333333 2. pack &&a ...

  5. php里的declare用法

    function tick_handler () { echo "tick_handler() called<br>" ; } function tick_handle ...

  6. 走入PHP-declare、ticks、encoding、include

    declare 结构用来设定一段代码的执行指令.declare 的语法和其它流程控制结构相似(该代码为语法格式,不是代码案例,无需敲打该代码): declare (directive) stateme ...

  7. 使用SQL生成DateTime.Ticks

    在项目中我需要使用到一个随机数(Random Number),该随机数将作为 Hashtable 中的 Key 用于唯一索引数据,所以需要保持单机唯一性. 同时该随机数还需要具备可排序性以便对数据进行 ...

  8. php ticks 调试应用

    declare(ticks=1); register_tick_function('do_profile'); register_shutdown_function('show_profile'); ...

  9. php中的declare

    <?php // 事件的回调函数 function func_tick() { echo "call...\r\n"; } // 注册事件的回调函数 register_tic ...

随机推荐

  1. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

    目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...

  2. spring + spring mvc可能会遇到的问题

    Spring容器优先加载由ServletContextListener(对应applicationContext.xml)产生的父容器,而SpringMVC(对应mvc_dispatcher_serv ...

  3. ruby 查询mysql方法

    首先对需要使用的数据库进行封装,便于使用:数据库表封装源码: mysqlapi.rb #业务涉及的数据库的配置ActiveRecord::Base$db1={:adapter => " ...

  4. (C#) Interview Questions.

    (Note: Most are collected from Internet. 绝大部分内容来自互联网) 1. What's the difference between Hashtable and ...

  5. ADF_Controller系列3_通过创建ADF Menu作为页面向导(Part1)

    2015-02-15 Created By BaoXinjian

  6. 快速求n的质因子(数论)

    快速求n的质因子 如何尽快地求出n的质因子呢?我们这里又涉及两个好的算法了! 第一个:用于每次只能求出一个数的质因子,适用于题目中给的n的个数不是很多,但是n又特别大的 #include<std ...

  7. NeHe OpenGL教程 第四十七课:CG顶点脚本

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. Graph单元

    感谢世外苏子恒同学提供   一.调用单元 例:uses graph;   二.初始化 例:initgraph(var graphdriver,graphmode:integer; const path ...

  9. 2012年第三届蓝桥杯C/C++程序设计本科B组决赛

    1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几[结果填空] (满分5分)    1949年的国庆节(10月1日)是星期六.     ...

  10. python 中 五种字典(dict)的遍历方法,实验法比较性能。

    1 .背景: 想知道5种遍历方法,并且知道从性能角度考虑,使用哪种. 2.结论: 使用这种方式: for key,val in AutoDict.iteritems(): temp = "% ...