CloudCastle Clock

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

MonotonicClock — монотонные часы

Назначение

Показания не убывают даже при переводе системных часов назад (NTP-коррекция, ручной перевод): дельта берётся из hrtime().

Для чего и как применять

Измерение интервалов, rate-limiting, тайм-ауты в долгоживущих процессах (демоны, воркеры очередей).

Пример

$clock = new MonotonicClock('UTC');
$start = $clock->microtime();
// ... системные часы перевели назад ...
$elapsed = $clock->microtime() - $start;   // всё равно >= 0

Анти-паттерны

Не для «настенного» времени: показания расходятся с реальными часами после их перевода.

Жизненный цикл

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

Сравнение возможности с аналогами

Аспект🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Устойчивость к откату системных часов✅✅❌❌❌❌
Наносекундная основа (hrtime)✅✅❌❌❌❌
Полный контракт часов (timestamp/microtime)✅❌❌❌❌❌
Произвольная таймзона выдачи✅✅❌❌❌❌
Реальный sleep()/sleepUntil() с досыпанием после сигнала✅✅❌❌❌❌
Всего🏆 540000

← К списку возможностей


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