usleep()
В этой статье мы рассмотрим функцию PHP usleep(), её принцип работы и примеры использования.
В этой статье мы рассмотрим функцию PHP usleep(). Мы предоставим вам обзор функции, принцип её работы и примеры использования.
Введение в функцию usleep()
Функция usleep() — это встроенная функция PHP, которая использовалась для приостановки выполнения скрипта на заданное количество микросекунд. Она позволяла создавать задержки с очень точной синхронизацией.
Примечание:
usleep()была объявлена устаревшей в PHP 8.1 и удалена в PHP 8.2. В современном PHP используйтеtime_nanosleep()илиtime_sleep_until()вместо неё.
Функция usleep() принимает один аргумент — количество микросекунд, на которое приостанавливается выполнение скрипта. Микросекунда — это одна миллионная доля секунды, поэтому 1000000 микросекунд равняются одной секунде. Именно эта более высокая точность отличает usleep() от sleep(), которая принимает только целые секунды.
Синтаксис
usleep(int $microseconds): void| Аргумент | Тип | Описание |
|---|---|---|
$microseconds | int | Количество микросекунд для остановки скрипта. 1 секунда = 1000000 микросекунд. |
Как использовать функцию usleep()
Использование функции usleep() очень простое. Нужно просто вызвать функцию и передать количество микросекунд для приостановки выполнения скрипта. Вот пример:
Как использовать функцию usleep()?
В этом примере мы вызываем функцию usleep() с аргументом 500000 — количеством микросекунд для приостановки выполнения скрипта. Это останавливает выполнение скрипта на 500 миллисекунд (0,5 секунды). Затем мы выводим сообщение в консоль о том, что ожидаем, ждём указанное время, а затем выводим ещё одно сообщение о завершении ожидания.
Измерение задержки
Поскольку микросекунды легко посчитать неправильно, полезно измерять реальное прошедшее время с помощью microtime(). Приведённый ниже пример ожидает четверть секунды и выводит фактическую продолжительность:
<?php
$start = microtime(true);
usleep(250000); // 250000 microseconds = 0.25 seconds
$elapsed = microtime(true) - $start;
echo "Slept for " . round($elapsed, 3) . " seconds\n";
?>Вывод примерно следующий: Slept for 0.25 seconds — он может быть немного длиннее, так как операционная система решает, когда разбудить процесс.
Когда использовать usleep()
usleep() полезна всегда, когда пауза в целую секунду от sleep() слишком груба:
- Ограничение частоты запросов — добавление небольшой паузы между повторяющимися вызовами API или итерациями цикла, чтобы не превысить квоту запросов.
- Опрос — ожидание доли секунды перед повторной проверкой файла, блокировки или очереди.
- Ограничение вывода — замедление анимации в CLI или отображения прогресса для удобочитаемости.
Для пауз, измеряемых в наносекундах, или когда вызов должен надёжно возобновиться после сигнала, предпочтительнее time_nanosleep(). Для паузы до определённого момента реального времени используйте time_sleep_until().
Вопросы производительности
Функция usleep() является легковесной и использует системные вызовы ОС для сна, поэтому накладные расходы на CPU минимальны. Однако фактическая продолжительность паузы зависит от планировщика ОС, поэтому точность до субмиллисекунды не гарантируется. Для более высокой точности или при работе с современным PHP рассмотрите time_nanosleep() или time_sleep_until().
Заключение
В заключение, функция usleep() представляет собой простой способ приостановить выполнение скрипта в устаревших средах PHP. Понимая требования к единицам измерения, зависимое от ОС поведение синхронизации и статус устаревания, вы можете эффективно использовать её для простых задержек или перейти на современные альтернативы, такие как time_nanosleep() или time_sleep_until().