PHP 8.6.0 Beta 3 is available for testing

La clase Swoole\Timer

(PECL swoole >= 1.9.0)

Introducción

Temporizador con precisión de milisegundos. La implementación subyacente se basa en epoll_wait y setitimer, con una estructura de datos de montículo mínimo que permite añadir un gran número de temporizadores.

En los procesos con E/S síncrona, como los procesos Manager y TaskWorker, se implementa mediante setitimer y señales.

En los procesos con E/S asíncrona, se implementa mediante el tiempo de espera de epoll_wait/kevent/poll/select.

El sistema subyacente no admite temporizadores con un retardo de 0; los valores inferiores a 1 milisegundo emiten un E_WARNING y la llamada falla. Esto difiere de lenguajes como Node.js. Swoole\Event::defer() puede utilizarse para obtener una funcionalidad similar.

<?php
Swoole\Event::defer(function () {
  echo "hola\n";
});
?>

Corrección del temporizador: el tiempo de ejecución de la función de retrollamada no afecta al instante de la siguiente ejecución. Por ejemplo, para un temporizador tick de 10 ms creado en 0,002 s, la primera retrollamada se ejecuta en 0,012 s; si la función de retrollamada tarda 5 ms, el siguiente disparo se produce igualmente en 0,022 s, y no en 0,027 s.

En cambio, si la función de retrollamada tarda demasiado, hasta cubrir el instante de la siguiente ejecución, el sistema subyacente corrige el tiempo: descarta los disparos vencidos y vuelve a llamar a la función en el siguiente instante disponible. Por ejemplo, si la retrollamada ejecutada en 0,012 s tarda 15 ms, lo que retrasa el temporizador previsto para 0,022 s, la retrollamada se dispara de nuevo en 0,032 s.

De forma predeterminada, cuando un temporizador se dispara se crea automáticamente una corrutina para ejecutar la función de retrollamada. Este comportamiento puede desactivarse con swoole_async_set().

Advertencia

Un temporizador solo funciona en el espacio del proceso actual.

Advertencia

Los temporizadores son puramente asíncronos e incompatibles con las funciones de E/S síncrona.

Advertencia

La ejecución de un temporizador puede presentar ligeras desviaciones de tiempo.

Sinopsis de la clase

class Swoole\Timer {
/* Métodos */
public static function after(int $ms, callable $callback, mixed ...$params): int|false
public static function clear(int $timer_id): bool
public static function clearAll(): bool
public static function exists(int $timer_id): bool
public static function info(int $timer_id): ?array
public static function list(): Swoole\Timer\Iterator
public static function set(array $settings): void
public static function stats(): array
public static function tick(int $ms, callable $callback, mixed ...$params): int|false
}

Tabla de contenidos

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top