(PECL swoole >= 1.9.0)
Minuteur d'une précision de l'ordre de la milliseconde. L'implémentation sous-jacente repose sur epoll_wait et setitimer, avec un tas-min qui permet d'ajouter un grand nombre de minuteurs.
Dans les processus à E/S synchrones, tels que les processus Manager et TaskWorker, elle repose sur setitimer et les signaux.
Dans les processus à E/S asynchrones, elle repose sur le délai d'expiration de epoll_wait/kevent/poll/select.
Le système sous-jacent ne prend pas en charge les minuteurs dont le délai vaut
0 : une valeur inférieure à 1 milliseconde
émet une E_WARNING et l'appel échoue. Cela diffère de langages
tels que Node.js.
Swoole\Event::defer()
permet d'obtenir un résultat similaire.
<?php
Swoole\Event::defer(function () {
echo "hello\n";
});
?>Correction du minuteur : la durée d'exécution de la fonction de rappel n'influe pas sur l'instant du déclenchement suivant. Par exemple, pour un minuteur tick de 10 ms créé à 0,002 s, le premier rappel est exécuté à 0,012 s ; si la fonction de rappel prend 5 ms, le déclenchement suivant a tout de même lieu à 0,022 s, et non à 0,027 s.
En revanche, si la fonction de rappel s'exécute trop longtemps, au point de couvrir l'instant du déclenchement suivant, le système sous-jacent corrige le temps : il abandonne les déclenchements périmés et rappelle la fonction au prochain instant disponible. Par exemple, si la fonction de rappel exécutée à 0,012 s prend 15 ms, ce qui retarde le minuteur prévu à 0,022 s, le rappel est déclenché à nouveau à 0,032 s.
Par défaut, une coroutine est automatiquement créée pour exécuter la fonction de rappel lorsqu'un minuteur se déclenche. Ce comportement se désactive avec swoole_async_set().
Un minuteur ne fonctionne que dans l'espace du processus courant.
Les minuteurs sont purement asynchrones et incompatibles avec les fonctions d'E/S synchrones.
L'exécution d'un minuteur peut présenter de légers écarts de temps.