Как CGI и сервлеты работают по-разному? - PullRequest
1 голос
/ 04 марта 2010

Насколько я понимаю, CGI порождает отдельный исполняемый процесс на сервере каждый раз, но сервлет этого не делает, но я не уверен, как описать, что происходит с сервлетом, для сравнения. Поскольку сервлет существует внутри JVM, а JVM представляет собой единый процесс, где сервлет существует по отношению к нему?

Ответы [ 3 ]

1 голос
/ 04 марта 2010

Контейнер сервлета (процесс JVM) обычно обрабатывает каждый запрос в отдельном потоке .

Максимальное количество используемых потоков, если потоки, которые завершили обслуживание запроса, остаются в живых для повторного использования в будущем и т. Д., Как правило, все настраиваемые атрибуты.

0 голосов
/ 04 марта 2010

Во время выполнения веб-сервер запускает процесс CGI в виде отдельной оболочки ОС. Оболочка включает в себя среду ОС и процесс для выполнения кода CGI, который находится в файловой системе сервера. Каждый новый http-запрос запускает новую оболочку ОС на сервере. Время отклика программ CGI велико, поскольку программы CGI выполняются в своей собственной оболочке ОС, а создание оболочки ОС является тяжелым делом для ОС.

В случае сервлета он работает как поток в веб-контейнере, а не в отдельном процессе ОС. Сам веб-контейнер представляет собой процесс ОС, но он работает как служба и доступен постоянно. Когда количество запросов на сервлет увеличивается, дополнительные экземпляры сервлета не создаются. Каждый запрос обрабатывается одновременно с использованием одного потока Java на запрос.

Обратите внимание, что сервлет выполняется как поток внутри процесса веб-контейнера.

0 голосов
/ 04 марта 2010

Код сервлета выполняется в потоке. Этот поток порождается контейнером сервлета, который является Java-приложением, работающим в JVM.

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

Преимущество состоит в том, что: порождение нового процесса является более дорогим (с точки зрения циклов памяти, ввода-вывода и процессора) для ОС, чем порождение потока внутри существующего процесса. Поток также разделяет пространство памяти с родительским процессом.

Темы могут быть объединены. Хотя создание потока обходится дешевле; безусловно, стоит заплатить за производительность; однако наличие пула потоков решает это в некоторой степени.

Еще один хороший момент наличия Threads - это элегантная обработка ошибок. Если поток возвращает ошибку, ее гораздо легче обработать, чем процесс, завершающийся с ошибкой.

...