Выбор ответа Junior net/http и middleware спрашивают часто обновлено
Обработчики net/http и горутины
Вопрос
Как net/http выполняет обработчики входящих запросов?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Каждое соединение в своей горутине, обработчики идут конкурентно. Сервер запускает горутину на каждое принятое соединение (а для HTTP/2 на каждый поток), поэтому две одновременные заявки выполнят обработчик параллельно.
Варианты ответа
- Все запросы обрабатываются строго по очереди в одной горутине сервера
- Каждое соединение в своей горутине, обработчики идут конкурентноправильный ответ
- Каждый запрос получает отдельный поток ОС из пула потоков
- В фиксированном пуле из GOMAXPROCS горутин-воркеров
Разбор
Сервер запускает горутину на каждое принятое соединение (а для HTTP/2 на каждый поток), поэтому две одновременные заявки выполнят обработчик параллельно. Глобальная мапа или счётчик без мьютекса в обработчике это гонка. Последовательной обработки, потоков ОС на запрос и фиксированного пула в net/http нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «net/http и middleware»
- Статистика access-логов: ошибки и p95 на Go
- Разбор сырого HTTP/1.1 запроса на Go
- Разбор query-строки URL с декодированием на Go
- Маршрутизатор с параметрами пути в стиле ServeMux
- Rate limiter на токен-бакете для middleware на Go
- Зачем закрывать resp.Body
- Надёжный HTTP-клиент в Go
- HTTP-сервис на стандартной библиотеке