Avisos
Considerações sobre o uso de temporizadores
-
Os temporizadores só podem ser adicionados dentro do callback
onXXXX. É recomendável configurar temporizadores globais no callbackonWorkerStarte temporizadores específicos para uma conexão noonConnect. -
As tarefas temporizadas adicionadas são executadas no processo atual (não iniciam novos processos ou threads). Tarefas pesadas podem impactar a execução de outras tarefas no processo atual, por isso é melhor executar tarefas demoradas em um ou mais processos Worker separados.
-
Se o processo atual não tiver habilitado as corrotinas swoole/swow e estiver ocupado com outros negócios, ou quando uma tarefa não for concluída no tempo esperado, o próximo ciclo de execução aguardará a conclusão da tarefa atual antes de ser executada. Isso pode fazer com que o temporizador não funcione conforme o intervalo de tempo esperado. Ou seja, os negócios no processo atual são executados de forma serial, enquanto em múltiplos processos, a execução das tarefas entre os processos é paralela.
-
Deve-se ter cuidado ao definir tarefas temporizadas em múltiplos processos, pois isso pode causar problemas de concorrência. Por exemplo, o código abaixo imprimirá 5 vezes a cada segundo.
$worker = new Worker(); // 5 processos $worker->count = 5; $worker->onWorkerStart = function(Worker $worker) { // 5 processos, cada um com um temporizador como este Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll();Se você deseja que apenas um processo execute o temporizador, consulte o Exemplo 2 de Timer::add.
-
Pode haver um erro de cerca de 1 milissegundo.
-
Os temporizadores não podem ser excluídos entre processos. Por exemplo, um temporizador definido no processo a não pode ser excluído diretamente pelo processo b usando o método Timer::del.
-
Os IDs de temporizador entre processos diferentes podem ser duplicados, mas os IDs de temporizador gerados dentro do mesmo processo não se duplicarão.
-
Alterações no horário do sistema afetarão o comportamento do temporizador, portanto, recomenda-se reiniciar após alterar o horário do sistema.