Precauciones
Precauciones sobre el uso de temporizadores
-
Solo se pueden agregar temporizadores dentro de las devoluciones de llamada
onXXXX. Se recomienda establecer temporizadores globales dentro de la devolución de llamadaonWorkerStart, mientras que se recomienda establecer temporizadores específicos para una conexión en la devolución de llamadaonConnect. -
Las tareas programadas agregadas se ejecutan en el proceso actual (no se inicia un nuevo proceso o hilo). Las tareas pesadas pueden afectar la ejecución de otras tareas en el proceso actual, por lo que es mejor ejecutar tareas que consumen tiempo en un proceso separado, por ejemplo, estableciendo uno o más procesos Worker para ejecutarlas.
-
Si el proceso actual no ha habilitado las corrutinas swoole/swow, mientras el proceso actual esté ocupado con otros negocios o cuando una tarea no haya terminado en el tiempo esperado y llegue el siguiente ciclo de ejecución, esperará a que la tarea actual complete su ejecución antes de proceder. Esto puede causar que el temporizador no se ejecute en el intervalo de tiempo esperado. En otras palabras, las operaciones del proceso actual se ejecutan de manera secuencial; si se trata de múltiples procesos, la ejecución de tareas entre procesos será paralela.
-
Es importante tener en cuenta que establecer tareas programadas en múltiples procesos puede causar problemas de concurrencia. Por ejemplo, el siguiente código imprimirá 5 veces por segundo.
$worker = new Worker(); // 5 procesos $worker->count = 5; $worker->onWorkerStart = function(Worker $worker) { // 5 procesos, cada proceso tiene un temporizador de este tipo Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll();Si solo desea que un proceso ejecute el temporizador, consulte Ejemplo 2 de Timer::add.
-
Puede haber un error de aproximadamente 1 milisegundo.
-
Los temporizadores no pueden ser eliminados entre procesos, por ejemplo, un temporizador establecido en el proceso a no se puede eliminar directamente desde el proceso b llamando a la interfaz Timer::del.
-
Los ids de temporizador pueden repetirse entre diferentes procesos, pero los ids de temporizador generados dentro de un mismo proceso no se repetirán.
-
Cambiar la hora del sistema afectará el comportamiento del temporizador, por lo que se recomienda reiniciar después de modificar la hora del sistema.