Как устроены каналы в Go?

Middle
2.3k просмотров
AFK Offer AI

Канал — это структура hchan с кольцевым буфером, мьютексом и двумя очередями ожидающих горутин (sendq/recvq).

Небуферизированный канал: отправитель блокируется, пока получатель не заберёт значение — данные копируются напрямую между стеками горутин. Буферизированный: данные кладутся в кольцевой буфер, блокировка только когда буфер полон (send) или пуст (receive).

Внутри используется runtime.gopark для парковки горутин и runtime.goready для пробуждения. Каждая операция send/receive защищена мьютексом канала.

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

Как удалять элементы из слайса?