W3docs

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

Parâ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 de 0 a 999999999. Valores de 1000000000 ou mais causam um aviso e a chamada falha.

Valores de retorno

  • Retorna true em caso de sucesso.
  • Retorna false em 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, seconds e nanoseconds, 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:

php— editable, runs on the server

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():

php— editable, runs on the server

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:

php— editable, runs on the server

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.

Prática

Prática
O que a função PHP nanosleep() faz?
O que a função PHP nanosleep() faz?
Was this page helpful?