Minuterie avec une précision de la milliseconde. La couche inférieure est implémentée sur la base de epoll_wait et setitimer. La structure de données utilise un tas minimum, qui peut prendre en charge l'ajout d'un grand nombre de timers.
Utiliser l'implémentation de setitimer et de signal dans le processus de synchronisation, comme les processus Manager et TaskWorker Utiliser epoll_wait/kevent/poll/select timeout dans le processus asynchrone pour atteindre les
Performances
La couche inférieure utilise la structure de données de tas minimale pour implémenter la minuterie, L'ajout et la suppression de minuteries sont toutes des opérations de mémoire, donc les performances sont très élevées.
Dans le script de référence officiel https://github.com/swoole/swoole-src/blob/master/benchmark/timer.php, l'ajout ou la suppression d'un minuteur de 100 000 temps aléatoires prend : environ 0,08 s.~/workspace/swoole/benchmark$ php timer.php add 100000 timer :0.091133117675781s del 100000 timer :0.084658145904541s
Différence
Timer est différent du propre pcntl_alarm de PHP. pcntl_alarm est basé sur l'implémentation de la fonction signal d'horloge + tick et présente quelques défauts :
Il ne prend en charge que jusqu'à quelques secondes, tandis que la minuterie peut atteindre le niveau de la millisecondeNe prend pas en charge la configuration de plusieurs programmes de minuterie en même temps timepcntl_alarm s'appuie sur declare(ticks = 1), et les performances sont très mauvaises
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!