PHP declare(ticks = N)

今天有同事提到,要在后台脚本(crontab里的,或者daemon)调用pcntl_signal(),但担心declare(ticks = 1)会不会引起系统性能或稳定性方面的问题。

 
根本上,还是要看看declare(在zend_compile.c中,有tick的相关实现,估计再结合zend_language_parser.y)和pcntl_*(ext/pcntl/)的实现。暂时没时间,先把目前我想到的和猜测的记一下。
 
declare(ticks = N),告诉PHP,在当前scope内,每执行N句internal statements(opcodes),就中断当前正在做的,去执行通过register_tick_function注册的函数(如果有的话),执行完后再回到原来正在做的中断现场继续,这可能就是庆骏的所说的吧。但问题是,因为PHP statements和internal statements并非严格一一对应,所以ticks = N的N,可能不好确定。

 pcntl_signal,通过declare(ticks = 1),让PHP每执行完一句internal statement,就检查有没有相应的signal发生。因为,可能不像直接用C写的POSIX 程序,由kernel通知signal的发生。

 

to be continued...

posted @ 2018-01-23 11:00  追忆丶年华  阅读(108)  评论(0编辑  收藏  举报