У меня есть два вопроса относительно функции sleep()
в PHP:
Время сна влияет на максимальное время выполнения моих PHP-скриптов? Иногда PHP показывает сообщение «максимальное время выполнения 30 секунд превышено». Появится ли это сообщение, если я использую sleep(31)
?
Существуют ли какие-либо риски при использовании функции sleep()
? Это стоит много производительности процессора?
Вы должны попробовать, просто используйте скрипт, который будет спать больше, чем ваше максимальное время выполнения.
<?php sleep(ini_get('max_execution_time') + 10); ?>
Спойлер: в Linux время сна игнорируется, но под Windows оно считается временем выполнения.
Это влияет только на время скрипта, а не на системные вызовы, такие как sleep (). По-видимому, есть ошибка, когда включена функция sleep () Windows. Максимальное время выполнения – это время в реальном времени, а не время процессора или что-то в этом роде. Однако вы можете изменить его:
Что касается разницы между двумя последними, я считаю max_execution_time фиксированной величиной. Бег:
ini_set('max_execution_time', 60);
будет ограничивать скрипт до 60 секунд. Если через 20 секунд вы вызываете:
set_time_limit(60);
теперь скрипт будет ограничен 20 + 60 = 80 секунд.
На странице PHP sleep () есть примечание, добавленное пользователем:
Примечание. Функция set_time_limit () и директива конфигурации max_execution_time влияют только на время выполнения самого скрипта. Любое время, затрачиваемое на активность, которое происходит вне выполнения сценария, например системные вызовы с использованием system (), функция sleep (), запросы к базе данных и т. Д. Не включается при определении максимального времени выполнения сценария.
Другие уже рассмотрели основы времени сна () и времени выполнения сценария PHP, но вы также должны знать о другом риске при использовании очень длинных периодов сна.
Обычно, когда браузер отправляет запрос на сервер и не получает никаких данных с сервера, соединение может отключиться. Это ограничение зависит от настроек браузера, но я читал, что IE7 имеет значение по умолчанию всего 30 секунд, в то время как Firefox имеет значение по умолчанию 115 секунд – вы можете проверить свою собственную конфигурацию в Firefox, перейдя к : config и фильтрация для network.http.keep-alive.timeout (срок указывается в секундах).
Изменить: у меня были единицы для network.http.keep-alive.timeout и browser.urlbar.search.timeout. Это действительно в секундах, а не в десятых долях секунды.
a) Да, он рассчитывает на ограничение по времени (поэтому sleep (31) вызовет ошибку)
б) Он делает противоположное от стоимости производительности процессора – он позволяет другим приложениям использовать процессор (когда приложение засыпает, использование ЦП этого приложения будет около 0%). Помимо того, что у меня время от времени, я не могу думать о каких-либо рисках использования этого.