Avisos

Considerações sobre o uso de temporizadores

  1. Os temporizadores só podem ser adicionados dentro do callback onXXXX. É recomendável configurar temporizadores globais no callback onWorkerStart e temporizadores específicos para uma conexão no onConnect.

  2. 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.

  3. 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.

  4. 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.

  5. Pode haver um erro de cerca de 1 milissegundo.

  6. 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.

  7. 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.

  8. 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.