SO_REUSEPORT позволяет нескольким сокетам привязаться к одному адресу и порту при соблюдении условий Linux. Ядро распределяет входящие соединения между отдельными слушателями, уменьшая конкуренцию за общий accept.
Как работает механизм SO_REUSEPORT на уровне сокетов Linux и как он позволяет процессам слушать один и тот же порт без блокировок?
SO_REUSEPORT позволяет нескольким сокетам привязаться к одному адресу и порту при соблюдении условий Linux. Ядро распределяет входящие соединения между отдельными слушателями, уменьшая конкуренцию за общий accept.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
SO_REUSEPORT позволяет нескольким сокетам привязаться к одному адресу и порту при соблюдении условий Linux. Ядро распределяет входящие соединения между отдельными слушателями, уменьшая конкуренцию за общий accept.
Опцию устанавливают на каждом участвующем сокете до bind; для защиты от перехвата порта требуется совпадение effective UID. Каждый worker может иметь собственный listening socket. Распределение можно настраивать через поддерживаемые BPF-механизмы. Формулировка «без блокировок» слишком абсолютна: механизм снижает определённую конкуренцию, но не устраняет всю синхронизацию ядра и не гарантирует идеальный баланс при любой нагрузке.
Источник: man7.org.