首頁  >  文章  >  php框架  >  swoole定時器是單開的進程嗎

swoole定時器是單開的進程嗎

(*-*)浩
(*-*)浩原創
2019-12-12 13:41:562012瀏覽

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),效能很差

以上是swoole定時器是單開的進程嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn