Если ты делаешь синхронный запрос в базу данных или соседний сервис, и запрос выполняется 5 секунд, что произойдёт с потоком операционной системы, на котором запущен сервис, пока выполняется запрос?

В Go синхронный сетевой API обычно паркует горутину через netpoll, позволяя потоку выполнять другую работу. Но настоящий блокирующий syscall или cgo может заблокировать поток ОС.

Короткий ответ

Что ответить на собеседовании

В Go синхронный сетевой API обычно паркует горутину через netpoll, позволяя потоку выполнять другую работу. Но настоящий блокирующий syscall или cgo может заблокировать поток ОС.

Подробный разбор

Ответ с пояснениями

В Go синхронный сетевой API обычно паркует горутину через netpoll, позволяя потоку выполнять другую работу. Но настоящий блокирующий syscall или cgo может заблокировать поток ОС.

Когда поток уходит в длительный системный вызов, runtime может передать право выполнения Go-кода другому потоку. Поэтому «синхронный вызов» не означает остановку всего сервиса на пять секунд. Поведение зависит от драйвера и вида I/O; файловые операции и внешние библиотеки не всегда устроены как стандартная сеть. Дедлайн и ограничение конкурентности всё равно необходимы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее