Я разработал некоторые веб-приложения до сих пор, используя PHP, Python и Java. Но некоторые фундаментальные, но очень важные вопросы по-прежнему не в моих силах, поэтому я сделал этот пост, чтобы получить помощь и разъяснения от вас, ребята.
Предположим, что я использую некоторый язык программирования в качестве моего внутреннего языка (PHP/Python/.Net/Java и т.д.), и я развертываю свое приложение с веб-сервером (apache/lighttpd/nginx/IIS и т.д.). И предположим, что в момент времени T одна из моих страниц получала 100 одновременных запросов от разных пользователей. Поэтому мои вопросы:
- Как мой веб-сервер обрабатывает такие 100 одновременных запросов? Будет ли веб-сервер генерировать один процесс/поток для каждого запроса? (если да, процесс или поток?)
- Как работает интерпретатор бэкэнд-языка? Как он обрабатывает запрос и генерирует правильный html? Будет ли интерпретатор генерировать процесс/поток для каждого запроса? (Если да, процесс или поток?)
- Если интерпретатор будет генерировать процесс/поток для каждого запроса, как об этих процессах (потоках)? Поделитесь ли они некоторым кодовым пространством? Будут ли они общаться друг с другом? Как обрабатывать глобальные переменные во внутренних кодах? Или они независимые процессы (потоки)? Как долго длится процесс/поток? Будут ли они уничтожены при обработке запроса и ответ будет возвращен?
- Предположим, что веб-сервер может поддерживать только 100 одновременных запросов, но теперь он получил 1000 одновременных запросов. Как он справляется с такой ситуацией? Будут ли они обрабатывать их как очередь и обрабатывать запрос, когда сервер доступен? Или другие подходы?
- В наши дни я прочитал некоторые статьи о кометах. И я обнаружил, что длительное соединение может быть хорошим способом обработки многопользовательских пользователей в режиме реального времени. Итак, как насчет длительной связи? Является ли это особенностью некоторых определенных веб-серверов или доступно для каждого веб-сервера? Длительное соединение потребует длительного процесса интерпретации?
Спасибо всем. Эти вопросы меня очень раздражали. Поэтому надеюсь, что вы сможете помочь. Более подробный ответ будет оценен очень сильно. И, пожалуйста, добавьте некоторые ссылки.
С уважением.
EDIT: Недавно я прочитал несколько статей о CGI и fastcgi, что заставляет меня понять, что подход fastcgi должен быть типичным подходом к запросу hanlde.
протокол мультиплексирует одно транспортное соединение между несколькими независимыми запросами FastCGI. Это поддерживает приложения, которые могут обрабатывать параллельные запросы с использованием методов, управляемых событиями или многопоточными методами.
Цитата из спецификация fastcgi, в которой упоминалось соединение, которое может обрабатывать несколько запросов и может быть реализовано в mutli-threaded тек. Мне интересно, как это соединение можно трактовать как процесс, и он может генерировать несколько потоков для каждого запроса. Если это правда, я стал больше запутанным в том, как обрабатывать общий ресурс в каждом потоке?
P.S благодарит Томаса за то, что он пригласил почту на несколько сообщений, но я думаю, что вопросы связаны друг с другом, и лучше группировать их вместе.
Благодарим С.Лотта за большой ответ, но некоторые ответы на каждый вопрос слишком кратки или вообще не рассматриваются.
Благодарим всех за ответ, что делает меня ближе к истине.
Подробный ответ будет оценен очень сильно!