PHP разработан для асинхронной обработки по требованию.Однако его можно заставить выполнять фоновую задачу с небольшим количеством хакеров.
Поскольку PHP работает как один поток, вам не нужно беспокоиться о том, чтобы позволить процессору делать другие вещи, о которых уже позаботились.Если бы это было не так, то веб-сервер мог бы обслуживать только одну страницу за раз, а все остальные запросы должны были бы находиться в очереди.Вам нужно будет написать какой-то вид, который никогда не истекает, пока не произойдет какое-либо обнаруживаемое условие (например, сообщение «сейчас, пожалуйста, выход», которое вы установили в БД или что-то в этом роде).
Как указали другие, вам потребуетсяset_time_limit($something);
с, возможно, usleep
, останавливая выполнение кода "слишком быстро", если он потребляет очень много ресурсов ЦП в каждом цикле.Однако, если вы также используете соединение с базой данных, большая часть времени вашего сценария фактически является сценарием, ожидающим базу данных (безусловно, самые большие накладные расходы для сценария).
Я видел рабочие потоки PHP, созданные с использованием screen иотстраняя его от фоновой задачи.Другие подходы также работают до тех пор, пока у вас нет сеанса, который истекает или завершается (например, когда веб-браузер закрыт).Cron, который запускает скрипт, чтобы проверить, выполняется ли скрипт каждые x минут или часов, дает вам автоматическое восстановление из принудительного существования и / или перезапуска системы.
TL; DR: doevents «запекается» в PHP ивам не нужно об этом беспокоиться.