PHP进度功率信号管理

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

declare(ricks = n)

PHP进程信号处理

  php有一组进程控制函数PCNTL,使得php能在*nix系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

注意:pcntl这个扩展仅在cli/cgi模式下可用。mod_php和php-fpm中不可以使用。在web server环境中不要使用这组函数,因为会导致不可预料的结果。另,windows作为非类unix系统,没有这些函数。

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

主要有两个作用:

ticks

  PCNTL 使用ticks来作为信号处理机制(signal handle callback mechanism),可以最小程度地降低处理异步事件时的负载。何谓ticks?Tick 是一个在代码段中解释器每执行 N 条低级语句就会发生的事件,这个代码段需要通过declare来指定。

下面是一个隔5秒发送一个SIGALRM信号,并由signal_handler函数获取,然后打印一个“SIGALRM”的例子:

<?php           declare(ticks = 1);                 function signal_handler($signal) {               echo "SIGALRM".date("Y-m-d H:i:s",time.PHP_EOL;             pcntl_alarm(5);           }                 //安装闹钟信号触发器        pcntl_signal(SIGALRM, "signal_handler", true);           pcntl_alarm;   //5秒后向进程发送一个SIGALRM信号              while(true){        }          ?>

  其实官方的pcntl_signal性能极差,主要是PHP的函数无法直接注册到操作系统信号设置中,所以pcntl信号需要依赖tick机制来完成。 pcntl_signal的实现原理是,触发信号后先将信号加入一个队列中。然后在PHP的ticks回调函数中不断检查是否有信号,如果有信号就执行PHP中指定的回调函数,如果没有则跳出函数。 ticks=1表示每执行1行PHP代码就回调此函数。实际上大部分时间都没有信号产生,但ticks的函数一直会执行。 比较好的做法是去掉ticks,转而使用pcntl_signal_dispatch,在代码循环中自行处理信号。

2、declare;每执行一次低级语句会检查一次该进程是否有未处理过的信号,测试代码如下:运行 php signal.php然后CTL c 或者 kill -SIGINT PID 会导致运行代码跳出死循环去运行pcntl_signal注册的函数,效果就是脚本exit打印“Get signal SIGINT and exit”退出

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

pcntl_signal_dispatch

本文由星彩网app下载发布于计算机编程,转载请注明出处:PHP进度功率信号管理

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。