缘起
刚刚了解PHP中如何处理信号的时候,我认识了declare(ticks=1),就这样,我便给自己挖了个坑;终于有一天,我发现自己的程序总是有大量的如下系统调用:
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
虽然没觉得这个东西开销有多大,但至少是不应该的。
分析
当声明 了declare(ticks=1); PHP会在每执行1条可计时的低级语句后就执行上面的信号处理的系统调用。
解决办法
不使用declare,代之以在合适的地方调用 pcntl_signal_dispatch(); (该函数在PHP5.3才开始有的),该函数触发的就是上面提到的系统调用,这样就可以使得该系统调用不会太频繁