Что происходит когда горутина блокируется на I/O?

Middle
246 просмотров
AFK Offer AI

Когда горутина делает I/O (например, чтение из сети), она не блокирует OS-поток. Go использует netpoller — обёртку над epoll/kqueue. Горутина снимается с потока и паркуется, а поток берёт другую горутину из очереди. Когда данные готовы, netpoller будит горутину и она продолжает работу. Поэтому тысячи горутин могут ждать I/O одновременно без тысячи потоков.

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

Как тестировать time-dependent код?