PHP中信号的处理

缘起

刚刚了解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才开始有的),该函数触发的就是上面提到的系统调用,这样就可以使得该系统调用不会太频繁

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据