предисловие
Модель сервера включает режим потока и режим ввода-вывода, и если вы понимаете их, вы можете ориентироваться на различные сценарии. Сериал разделен на три части:
- Однопоточная/многопоточная блокирующая модель ввода-вывода
- Однопоточная модель неблокирующего ввода-вывода
- Многопоточная неблокирующая модель ввода-вывода, Reactor и его улучшения
предисловие
Модель сервера, обсуждаемая здесь, в основном относится к модели обработки ввода-вывода на стороне сервера. Могут быть разные классификации из разных измерений.Здесь модель сервера обсуждается с точки зрения блокировки и неблокировки ввода-вывода, однопоточной и многопоточной обработки ввода-вывода.
Для ввода-вывода его можно разделить на два типа: блокирующий ввод-вывод и неблокирующий ввод-вывод. Блокирующий ввод-вывод приведет к тому, что текущий поток перейдет в состояние блокировки при выполнении операций чтения и записи ввода-вывода, в то время как неблокирующий ввод-вывод не перейдет в состояние блокировки.
Для потоков, в случае одного потока, один поток отвечает за операции ввода-вывода всех клиентских соединений, а в случае многопоточности несколько потоков совместно обрабатывают операции ввода-вывода всех клиентских соединений.
Однопоточная блокирующая модель ввода-вывода
Однопоточная модель блокирующего ввода-вывода является простейшей серверной моделью, и почти все программисты начинают с этой простой модели, когда начинают заниматься сетевым программированием. Эта модель может одновременно обрабатывать только один клиентский доступ и блокируется при операциях ввода-вывода, поток всегда будет ждать и больше ничего не делать. При множественном клиентском доступе необходимо дождаться завершения предыдущего клиентского доступа, прежде чем обрабатывать следующий доступ.Запросы ставятся в очередь один за другим, и предоставляется только один вопрос и один ответ.
Во-первых, сервер должен инициализировать сервер сокетов, привязать номер порта и заставить его прослушивать клиентский доступ. Далее клиент 1 вызывает службу сервера, сервер обрабатывает запрос после его получения и после обработки записывает данные обратно клиенту 1. Весь процесс завершается в одном потоке. Наконец, обработайте запрос клиента 2 и запишите данные обратно клиенту 2. Даже если клиент 2 сделает запрос до того, как сервер завершит обработку клиента 1, он не ответит клиенту 2, пока сервер не ответит клиенту 1. Обработка ответа .
Эта модель характеризуется однопоточным и блокирующим вводом-выводом. Один поток означает, что на стороне сервера есть только один поток для обработки всех запросов клиента. Соотношение потоков обработки клиентского соединения к серверной части равно n: 1. Он не может обрабатывать несколько соединений одновременно. , но может обрабатывать только последовательные соединения. Блокировка ввода-вывода означает, что сервер блокируется при чтении и записи данных.При чтении клиентских данных ему необходимо дождаться, пока клиент отправит данные и скопирует ядро операционной системы в пользовательский процесс, прежде чем разблокировать. При обратной записи данных клиенту подождите, пока пользовательский процесс запишет данные в ядро и отправит их клиенту, прежде чем разблокировать. Эта блокировка создает проблему для сетевого программирования. Сервер должен дождаться, пока клиент успешно получит запрос, прежде чем продолжить обработку запроса другого клиента. В течение этого периода поток не сможет ответить ни на один запрос клиента.
Характеристики этой модели: это самая простая серверная модель, во всем запущенном процессе всего один поток, и он может поддерживать обработку запросов только от одного клиента одновременно (если к нему обращаются несколько клиентов, он должен ждать в очереди), а потребление системных ресурсов сервера относительно невелико.Небольшой, но с низким параллелизмом и плохой отказоустойчивостью.
Многопоточная блокирующая модель ввода-вывода
Из-за недостатков однопоточной модели блокирующего ввода-вывода мы можем использовать многопоточность, чтобы улучшить ее, чтобы она могла одновременно отвечать нескольким клиентам. Суть модели многопоточности заключается в использовании механизма многопоточности для назначения потока каждому клиенту. Серверная сторона начинает отслеживать доступ клиента.Если два клиента отправляют запросы, серверная сторона создает два потока для их обработки после получения запроса клиента.Каждый поток отвечает за клиентское соединение до тех пор, пока ответ не будет завершен. В течение этого периода два потока одновременно обрабатывают запросы для соответствующих клиентов, включая такие операции, как чтение данных клиента, обработка данных клиента и запись данных обратно клиенту.
Операция ввода-вывода в этой модели также блокируется, потому что каждый поток входит в состояние блокировки, когда выполняет операцию чтения или записи, и состояние блокировки не будет освобождено до тех пор, пока данные не будут прочитаны клиенту или данные не будут успешно записаны. клиенту. Несмотря на то, что операция ввода-вывода заблокирована, производительность в этом режиме значительно выше, чем при однопоточной обработке: не нужно ждать обработки первого запроса перед обработкой второго, вместо этого он обрабатывает клиентские запросы. одновременно, а клиент подключается к серверу.Соотношение потоков побочной обработки 1:1.
Особенности многопоточной модели блокирующего ввода-вывода: она поддерживает одновременные ответы нескольким клиентам, производительность обработки значительно улучшена, и существует большое количество параллелизма, но потребление системных ресурсов сервера велико, и происходит переключение потоков между стоит несколько потоков, имея при этом более сложную структуру.
============Время рекламы================
Меню официальной учетной записи было разделено на «распределенное», «машинное обучение», «глубокое обучение», «НЛП», «глубина Java», «ядро параллелизма Java», «исходный код JDK», «ядро Tomcat», и т.д. Там может быть один стиль, чтобы удовлетворить ваш аппетит.
Моя новая книга «Анализ проектирования ядра Tomcat» продана на Jingdong, и нуждающиеся друзья могут ее купить. Спасибо друзья.
Зачем писать «Анализ проектирования ядра Tomcat»
=========================
Добро пожаловать, чтобы следовать: