time_nanosleep()
Aprenda a usar a função PHP time_nanosleep(), sua sintaxe, parâmetros, valores de retorno e exemplos práticos de uso.
Neste artigo, vamos nos concentrar na função PHP time_nanosleep(). Abordaremos sua sintaxe, parâmetros e valores de retorno, mostraremos exemplos práticos, explicaremos como lidar com interrupções e indicaremos funções relacionadas de atraso.
Introdução à função time_nanosleep()
A função time_nanosleep() é uma função nativa do PHP que pausa a execução de um script por um determinado número de segundos e nanossegundos. Por aceitar precisão em nanossegundos, é a forma mais refinada de introduzir um atraso em PHP — muito mais precisa do que sleep(), que aceita apenas segundos inteiros.
Um nanossegundo é um bilionésimo de segundo (1e-9 s), portanto 1000000000 nanossegundos equivalem a um segundo completo. Na prática, a precisão real é limitada pelo agendador do sistema operacional, mas a função permite solicitar atrasos sub-microssegundo.
time_nanosleep() é baseada em POSIX e não está disponível no Windows por padrão.
Sintaxe
time_nanosleep(int $seconds, int $nanoseconds): array|boolParâmetros
$seconds— o número de segundos inteiros a pausar. Deve ser um inteiro não negativo.$nanoseconds— o número adicional de nanossegundos a pausar, no intervalo de0a999999999. Valores de1000000000ou mais causam um aviso e a chamada falha.
Valores de retorno
- Retorna
trueem caso de sucesso. - Retorna
falseem caso de erro (por exemplo, quando um argumento está fora do intervalo). - Se o sleep for interrompido por um sinal, retorna um array associativo com duas chaves,
secondsenanoseconds, contendo a quantidade de tempo restante para dormir. Isso permite retomar o atraso de onde foi interrompido.
Como usar a função time_nanosleep()
Chame a função e passe o número de segundos e nanossegundos para pausar. Veja um exemplo básico:
Neste exemplo, chamamos time_nanosleep() com 1 segundo e 500000000 nanossegundos. Isso pausa o script por 1 segundo mais 500.000.000 nanossegundos (0,5 segundos), totalizando 1,5 segundos. Imprimimos uma mensagem antes da pausa, aguardamos o tempo especificado e, em seguida, imprimimos outra mensagem ao concluir.
Medindo o atraso real
Como o agendador do SO decide exatamente quando o processo é retomado, a pausa real é no mínimo a duração solicitada, mas pode ser ligeiramente maior. Você pode verificar isso com microtime():
O valor impresso será aproximadamente 0.250 segundos (por exemplo 0.250 ou 0.251), confirmando o atraso de um quarto de segundo solicitado.
Retomando após uma interrupção de sinal
Se um sinal interromper o sleep, time_nanosleep() retorna o tempo restante como um array em vez de true. Você pode criar um loop até que o atraso completo tenha decorrido:
Sem um manipulador de sinais, o corpo do loop nunca é executado, mas este é o padrão correto para scripts que registram manipuladores de sinais com a extensão pcntl.
Considerações de desempenho
time_nanosleep() é eficiente porque depende do agendador do SO em vez de busy-waiting, portanto não consome ciclos de CPU durante a pausa. Tenha em mente os seguintes pontos:
- É somente POSIX e não está disponível no Windows por padrão. No Windows, use
usleep()para atrasos em microssegundos. - Ao chamá-la com frequência, a sobrecarga de troca de contexto pode se acumular, portanto use-a apenas quando a precisão sub-segundo for realmente necessária.
- A pausa é um mínimo, não uma garantia exata — nunca dependa dela para temporização em tempo real rígido.
Funções relacionadas
sleep()— pausa a execução por um número inteiro de segundos.usleep()— pausa a execução por um número de microssegundos.time_sleep_until()— pausa até que um determinado timestamp Unix seja atingido.microtime()— obtém o tempo atual com precisão em microssegundos, útil para medir atrasos.
Conclusão
Em conclusão, a função time_nanosleep() é uma ferramenta poderosa para criar atrasos com temporização muito precisa. Ao entender como usar a função e suas considerações de desempenho, você pode aproveitar este recurso para criar atrasos de temporização precisos em seus scripts PHP.