Post Thumbnail

Еще одна из цикла про устройство рантайма Go

В этой статье разбирается, как устроен сетевой поллер (netpoller) в Go - та самая магия, которая позволяет писать простой блокирующий код вроде conn.Read(), а под капотом использовать epoll, kqueue и IOCP без блокировки потоков ОС.

Автор объясняет проблему дороговизны потоков и решение через дешевые горутины, которые засыпают и просыпаются по событиям готовности сокетов, используя официантскую аналогию: вы делаете заказ и отдыхаете, а когда кухня позвонит в колокольчик, вам принесут еду. Детально показан путь блокирующего чтения, хитрая трехшаговая парковка горутин, работа с дедлайнами через рантаймовые таймеры, защита от устаревших событий с помощью счетчика поколений и взаимодействие с планировщиком. В итоге все это позволяет держать миллион соединений на горстке потоков

Похожее

Post Thumbnail

Атомики

Автор рассказывает про атомарные операции в Go как более производительная альтер...

Post Thumbnail

eBPF в GitHub

Ребята из GitHub рассказали как они используют eBPF. С помощью eBPF они перех...

Post Thumbnail

Soppo

Какая-то неожиданная волна новых языков, похожих на Go, только с блэкджеком и гу...