Как работает netpoller в Go?

Senior
313 просмотров
AFK Offer AI

Netpoller — это компонент Go рантайма, который интегрирует неблокирующий I/O с горутинами. Когда горутина делает Read на сокете и данных нет, рантайм переводит fd в неблокирующий режим, регистрирует его в epoll (или kqueue на macOS), и паркует горутину. Когда данные приходят, epoll сигналит, рантайм будит горутину, и она продолжает работу. Для программиста это выглядит как обычный блокирующий вызов, но на уровне OS потоки не блокируются. Именно это позволяет Go обрабатывать миллионы соединений малым числом OS-потоков.

Следующий вопрос

Как работает goroutine scheduling loop?