Каковы различные подходы при разработке веб-сервера?Итак, я предполагаю, что есть (1) многопоточный (2) цикл обработки событий, есть что-нибудь еще?Каковы будут плюсы / минусы каждого подхода?когда бы вы использовали каждый?Можете ли вы перечислить конкретные значения для каждого подхода
Различным подходом может быть:
Однопоточный: все соединения обрабатываются одним потоком, который "прослушивает" и ожидает запросов на соединения и обрабатывает их. Это просто реализовать, ноэто самый бесполезный сервер, так как он может обслуживать только запросы за один раз
Многопоточный: сервер прослушивает запросы, и каждый входящий запрос выделяется новому потоку для его обработки.клиентское соединение обрабатывается его выделенным потоком.Этот подход (в отличие от 1) поддерживает параллельную обработку клиентских запросов, но плохо масштабируется, поскольку каждый новый запрос создает новый поток на сервере, и это занимает много ресурсов. В конечном итоге сервер достигнет предела
Multithreaded-Pools: та же идея, что и (2), но вместо создания нового потока для обработки каждого входящего запроса используется поток из пула потоков. То есть потоки создаются и помещаются в пул для последующего повторного использования.Это очень хорошо масштабируется для поддержки нескольких клиентских запросов, и это стандартный подход. Например, Tomcat работает следующим образом.
Event-Queue: каждый входящий запрос помещается в очередь и обрабатываетсяФоновый поток принимает запросы из очереди.Он неблокируемый, и этот тип асинхронной обработки также хорошо масштабируется. Честно говоря, я не уверен, что он лучше (3) по производительности. Я думаю, что tomcat можно настроить для этого с помощью архитектуры NIO
Некоторые серверы, такие как G-WAN mix Multithreaded-Pools и Очереди событий , позволяя серверу насыщать ядра CPU каждым потоком , обрабатывающими много соединений.
Отказ от ответственности: я участвую в разработке этого проекта.
Вы должны добавить неблокирующий ввод / вывод. Взгляните на Нетти .