W3docs

time_nanosleep()

Aprende a usar la función PHP time_nanosleep() para pausar la ejecución con precisión de nanosegundos, con ejemplos y valores de retorno.

En este artículo nos centraremos en la función PHP time_nanosleep(). Cubriremos su sintaxis, parámetros y valores de retorno, mostraremos ejemplos funcionales, explicaremos cómo manejar interrupciones y señalaremos funciones de retardo relacionadas.

Introducción a la función time_nanosleep()

La función time_nanosleep() es una función integrada de PHP que pausa la ejecución de un script durante un número determinado de segundos y nanosegundos. Dado que acepta precisión de nanosegundos, es la forma más detallada de introducir un retardo en PHP — mucho más precisa que sleep(), que solo acepta segundos enteros.

Un nanosegundo es una milmillonésima de segundo (1e-9 s), por lo que 1000000000 nanosegundos equivalen a un segundo completo. En la práctica, la precisión real está limitada por el planificador del sistema operativo, pero la función permite solicitar retardos inferiores a un microsegundo.

time_nanosleep() está basada en POSIX y no está disponible en Windows de forma predeterminada.

Sintaxis

time_nanosleep(int $seconds, int $nanoseconds): array|bool

Parámetros

  • $seconds — el número de segundos enteros de pausa. Debe ser un entero no negativo.
  • $nanoseconds — el número adicional de nanosegundos de pausa, en el rango de 0 a 999999999. Los valores de 1000000000 o más generan una advertencia y la llamada falla.

Valores de retorno

  • Devuelve true en caso de éxito.
  • Devuelve false en caso de error (por ejemplo, cuando un argumento está fuera de rango).
  • Si la pausa es interrumpida por una señal, devuelve un array asociativo con dos claves, seconds y nanoseconds, que contienen el tiempo restante de espera. Esto es lo que permite reanudar el retardo donde fue interrumpido.

Cómo usar la función time_nanosleep()

Llama a la función y pasa el número de segundos y nanosegundos de pausa. Aquí tienes un ejemplo básico:

php— editable, runs on the server

En este ejemplo, llamamos a time_nanosleep() con 1 segundo y 500000000 nanosegundos. Esto pausa el script durante 1 segundo más 500.000.000 nanosegundos (0,5 segundos), es decir, 1,5 segundos en total. Imprimimos un mensaje antes de la pausa, esperamos el tiempo especificado y luego imprimimos otro mensaje al finalizar.

Medición del retardo real

Dado que el planificador del sistema operativo decide exactamente cuándo se reanuda el proceso, la pausa real es como mínimo la duración solicitada, pero puede ser ligeramente mayor. Puedes verificarlo con microtime():

php— editable, runs on the server

El valor impreso será aproximadamente 0.250 segundos (por ejemplo 0.250 o 0.251), confirmando el retardo de un cuarto de segundo solicitado.

Reanudación tras una interrupción por señal

Si una señal interrumpe la pausa, time_nanosleep() devuelve el tiempo restante como un array en lugar de true. Puedes hacer un bucle hasta que haya transcurrido el retardo completo:

php— editable, runs on the server

Sin un manejador de señales, el cuerpo del bucle nunca se ejecuta, pero este es el patrón correcto para scripts que registran manejadores de señales con la extensión pcntl.

Consideraciones de rendimiento

time_nanosleep() es eficiente porque se basa en el planificador del sistema operativo en lugar de una espera activa, por lo que no consume ciclos de CPU durante la pausa. Ten en cuenta estos puntos:

  • Es solo para POSIX y no está disponible en Windows de forma predeterminada. En Windows, usa usleep() para retardos en microsegundos.
  • Al llamarla con frecuencia, la sobrecarga del cambio de contexto puede acumularse, así que úsala solo cuando sea necesaria una precisión inferior al segundo.
  • La pausa es un mínimo, no una garantía exacta — nunca confíes en ella para temporización en tiempo real estricto.

Funciones relacionadas

  • sleep() — pausa la ejecución durante un número entero de segundos.
  • usleep() — pausa la ejecución durante un número de microsegundos.
  • time_sleep_until() — pausa hasta que se alcanza una marca de tiempo Unix determinada.
  • microtime() — obtiene la hora actual con precisión de microsegundos, útil para medir retardos.

Conclusión

En conclusión, la función time_nanosleep() es una herramienta poderosa para crear retardos con una temporización muy precisa. Al comprender cómo usar la función y sus consideraciones de rendimiento, puedes aprovechar esta característica para crear retardos de temporización precisos en tus scripts PHP.

Práctica

Práctica
¿Qué hace la función PHP nanosleep()?
¿Qué hace la función PHP nanosleep()?
Was this page helpful?