毫秒精度的計時器。底層基於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),效能很差以上是swoole定時器是單開的進程嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!