TGViewer
Golang Юниор Golang Юниор @golangprofi · 4.98K subscribers
Post #750 1.42K
Ты думаешь, что conn.Read() блокирует? Нет. Тебя красиво обманули

В Go ты пишешь максимально прямолинейно: открыл соединение, читаешь данные, ждешь.

Выглядит как обычный blocking I/O. Но если бы это было правдой, любой highload сервис умирал бы уже на нескольких тысячах соединений.

Под капотом работает netpoller. Это часть runtime, которая превращает твой “блокирующий” код в неблокирующую систему с event loop логикой.

Когда goroutine делает conn.Read(), она не блокирует поток. Если данных нет, runtime просто паркует goroutine и освобождает поток для других задач. В этот момент файловый дескриптор уходит в epoll, kqueue или IOCP в зависимости от системы.

Как только ОС говорит “данные готовы”, netpoller будит нужную goroutine и возвращает ее в scheduler. Всё. Никаких потоков на каждое соединение, никакого оверхеда на контекст-свитчи.

И вот тут главный трюк Go. Ты пишешь код как синхронный. Но исполняется он как асинхронный. Без колбэков, без promise, без ручного управления состоянием.

По сути это комбинация scheduler + event loop, спрятанная внутри runtime. Ты не видишь сложность, но получаешь масштабируемость.

Именно поэтому тысячи goroutines могут одновременно ждать I/O почти бесплатно. Каждая занимает килобайты памяти, а не мегабайты как поток.

Но есть нюанс. Netpoller это не бесконечная магия. При экстремальной нагрузке он сам может стать узким местом. Один poll loop, огромное количество событий и привет, рост latency на хвостах.

В итоге Go делает редкий финт. Даёт тебе простой синхронный код и сам превращает его в высоконагруженную асинхронную систему.

https://internals-for-interns.com/posts/go-netpoller/
  • 👍 6
  • ❤ 3
More from @golangprofi
  1. Sep 21, 2026✔️ Вакансии по Go за неделю: 📥 Senior Golang (Backend) Developer Современные логистически…
  2. Sep 16, 2026Golang for Jobseekers Автор: Bin Noorazman Hairizuan Год издания: 2023 #go #en Скачать кни…
  3. Sep 16, 2026Разница между Go-разработчиком с зарплатой в 100–200 тысяч и 500 тысяч не в количестве нап…
  4. Sep 14, 2026⚡️ Вакансии по Go за неделю: 6️⃣ Senior Go Developer GGR Global Senior · Remote · $4 000 –…
  5. Sep 13, 2026⚡️ Google выпустили официальный пакет для работы с JSON Schema в Go Это библиотека для вал…
  6. Sep 13, 2026⚙️ System Design: проектирование масштабируемых систем — новый курс на Mentorix Нагрузка,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →