Учитывается ли время ожидания для ограничения времени выполнения?

StackOverflow https://stackoverflow.com/questions/740954

  •  09-09-2019
  •  | 
  •  

Вопрос

У меня есть два вопроса, касающиеся sleep() функция в PHP:

  1. Влияет ли время ожидания на максимальное время выполнения моих PHP-скриптов?Иногда PHP показывает сообщение "превышено максимальное время выполнения в 30 секунд".Появится ли это сообщение, если я использую sleep(31)?

  2. Существуют ли какие-либо риски при использовании sleep()функция?Сильно ли это влияет на производительность процессора?

Это было полезно?

Решение

Вы должны попробовать это, просто у вас есть скрипт, который находится в спящем режиме дольше вашего максимального времени выполнения.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

Спойлер: В Linux время ожидания игнорируется, но в Windows оно засчитывается как время выполнения.

Другие советы

Это влияет только на время скрипта, а не на системные вызовы, такие как sleep().По-видимому, существует ошибка, из-за которой в Windows включена функция sleep().Максимальное время выполнения относится к реальному времени, а не к процессорному времени или чему-то подобному.Однако вы можете изменить это:

Что касается разницы между последними двумя, я считаю, что 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(), запросы к базе данных и т.д.не учитывается при определении максимального времени, в течение которого выполняется скрипт.

Другие уже рассмотрели основы sleep () и ограничение по времени выполнения PHP-скрипта, но вы также должны знать о другом риске при использовании действительно длительных периодов ожидания.

Обычно, когда браузер отправляет запрос на сервер и не получает никаких данных от сервера, время ожидания соединения может истечь.Это ограничение по времени зависит от настроек браузера, но я читал, что IE7 имеет значение по умолчанию всего 30 секунд, в то время как Firefox имеет значение по умолчанию 115 секунд--вы можете проверить свою собственную конфигурацию в Firefox, перейдя по о программе: конфигурация и фильтрация для сеть.http.keep-alive.тайм-аут (ограничение по времени указано в секундах).

Редактировать:У меня были перепутаны блоки для network.http.keep-alive.timeout и browser.urlbar.search.timeout.Это действительно занимает секунды, а не десятые доли секунды.

a) Да, это относится к ограничению по времени (поэтому sleep (31) вызовет ошибку).

б) Это приводит к обратному снижению производительности процессора - это позволяет другим приложениям использовать процессор (когда приложение переходит в спящий режим, загрузка процессора этого приложения будет близка к 0%).Помимо того, что это отнимает время у пользователя, я действительно не могу думать о каких-либо рисках, связанных с этим использованием.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top