Как блокируется поток?

Объясните, пожалуйста, как осуществляется работа скриптов, например, на PHP.
Допустим, у меня есть скрипт, который выполняется очень долго, например вот такой:
$end = strtotime('+20 seconds');
while(time() < $end) {
//пустой цикл на 20 секунд
}
echo 'Loop is finished';

Приходит посетитель на сайт, веб сервер для него запускает этот скрипт и посетитель ждет пока он выполнится.
В это время приходит второй посетитель, третий и тд.
Что в это время создается? Как много таких посетителей может одновременно зайти? От чего это зависит?
Спасибо.
  • Вопрос задан
  • 962 просмотра
Решения вопроса 3
sim3x
@sim3x
хттп - стейтлес протокол
Браузер запросил у nginx страницу - получил ее

У nginx есть ограничение по времени, сколько он будет ждать пока не отдаст ответ юзеру
nginx, если в его конфиге указано, передает запрос по различным протоколам подрядчикам
Например пхп-фпм

У пхп фпм есть настройки
В настройках есть свои ограничения по времени ответа и колличеству, одновременно готовых к обработке запроса от nginx, процессов

В вашем случае при дефолтных таймерах у пользователя будет стоять минимум 20секунд белая страница и будет указано, что браузер ждет ответа сервера
Ответ написан
@nictrace
1. php выполняется не сам по себе, а через веб-сервер, например апач
2. апач содержит несколько воркеров, каждый из которых поддерживает фиксированное количество потоков (например, 100)
3. ваш долгий скрипт будет заставлять ваш броузер вращать ожидалкой, но это не помешает работе остальных клиентов
4. если вы запустите долгий скрипт в паре тысяч окон - можно заДДОСить сервер, так как у него кончатся свободные потоки.
5. если сервер оборудован защитой от атак - он просто забанит назойливый IP адрес, чтобы не упасть
Ответ написан
@UPSA
anykey
Как то все объяснили... размазано ... и чуть чуть .... я так же сделаю )))
Разбираем:
Что в это время создается?

1.
Приходит посетитель на сайт

Задача веб-сервера отдать файл. И только. Все остальное это "усложнения". Посмотри музейный экпонат - Lynx и год выпуска :). Это как функция fopen. Каждый посетитель запускает "функцию" которая пожирает память. Когда памяти не остается веб-сервер перестает работать. У Apache, кажется, лет 15 назад, по умолчанию количество открытых соединений равнялось 150. И функция работала пока не отдавала файл целиком и сразу закрывалась освобождая память.
2.
веб сервер для него запускает этот скрипт

Не веб-сервер запускает скрипт, а "злой" модуль перехвата, который сидит в памяти веб-сервера и ждет, например, когда захотят получить файл с расширением php. Тогда модуль перехватывает "управление" и передает инструкции записанные в этом файле для языка программирования и возвращает в веб-сервер ответ который в свою очередь передается посетителю.
3.
и посетитель ждет пока он выполнится.

Да. Ждет. Это сейчас есть CMS и framework, а раньше на php писали через echo все строчки html. НУ типо <php echo "Hello world"; > не ругайте, синтаксис не помню. Это к чему, иногда, ошибка приводила к необходимости перегружать сервер. Притом, ножками... те бежать к нему )))
Последнее.
Сейчас веб-сервера за столько лет хорошо отлажены, что попытка что то испортить, не обдуманно, очень мала.
Как много таких посетителей может одновременно зайти? От чего это зависит?
Зависит от настроек веб-сервера и операционной системы. До меня уже немного рассказали. Надо добавить что под протоколом http лежит протокол TCP. Количество соединений не может быть больше 65535 (меньше, конечно, но чуть чуть).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solutions Architect, AWS Certified, Hybrid Cloud
да для каждого пользователя просто создается параллельный поток через php-fpm как правило. это не Nodejs, python или Java где запускается один процесс к которому все стучатся
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы