CloudCastle Clock

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

MonotonicClock — reloj monótono

Propósito

Las lecturas no decrecen ni siquiera cuando el reloj del sistema se atrasa (corrección NTP, cambio manual): el delta se obtiene de hrtime().

Para qué y cómo utilizarlo

Medición de intervalos, rate-limiting, tiempos de espera en procesos de larga duración (demonios, workers de colas).

Ejemplo

$clock = new MonotonicClock('UTC');
$start = $clock->microtime();
// ... the system clock is moved backwards ...
$elapsed = $clock->microtime() - $start;   // still >= 0

Antipatrones

No sirve para el tiempo «de pared»: las lecturas divergen del reloj real después de ajustarlo.

Ciclo de vida

stateDiagram-v2
    [*] --> Anchored: new MonotonicClock()
    Anchored --> Reading: now() = anchor + hrtime delta
    Reading --> Reading: monotonic growth
    note right of Reading: system clock jumps\ndo not affect readings

Comparación de la característica con análogos

Aspecto🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Resistencia al retroceso del reloj del sistema✅✅❌❌❌❌
Base de nanosegundos (hrtime)✅✅❌❌❌❌
Contrato de reloj completo (timestamp/microtime)✅❌❌❌❌❌
Zona horaria de salida arbitraria✅✅❌❌❌❌
sleep()/sleepUntil() reales con reanudación tras una señal✅✅❌❌❌❌
Total🏆 540000

← A la lista de características


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano