毫秒精度的定時器。底層基于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