swoole定時器是單開的進程嗎

swoole定時器是單開的進程嗎

毫秒精度的定時器。底層基于epoll_wait和setitimer實現,數據結構使用最小,可支持添加大量定時器。

在同步進程中使用setitimer和信號實現,如Manager和TaskWorker進程? ? ? ? ? ? ? ? ? ? (推薦學習: swoole視頻教程

異步進程中使用epoll_wait/kevent/poll/select超時時間實現

性能

底層使用最小堆數據結構實現定時器,定時器的添加和刪除,全部為內存操作,因此性能是非常高的。

官方的基準測試腳本 https://github.com/swoole/swoole-src/blob/master/benchmark/timer.php 中,添加或刪除10萬個隨機時間的定時器耗時為0.08s左右。

~/workspace/swoole/benchmark$?php?timer.php add?100000?timer?:0.091133117675781s del?100000?timer?:0.084658145904541s

定時器是內存操作,無IO消耗

差異

Timer與PHP本身的pcntl_alarm是不同的。pcntl_alarm是基于時鐘信號 + tick函數實現存在一些缺陷:

最大僅支持到秒,而Timer可以到毫秒級別

不支持同時設定多個定時器程序

pcntl_alarm依賴declare(ticks = 1),性能很差

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享