Выбор ответа Senior Каналы и select обновлено

Устройство канала в рантайме

Вопрос

Что верно про внутреннее устройство канала (runtime.hchan)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Кольцевой буфер, индексы, очереди ждущих sudog и мьютекс. hchan содержит буфер фиксированного размера (кольцо), sendx/recvx, очереди sendq/recvq из структур sudog и lock.

Варианты ответа

  1. Lock-free очередь на атомиках, без мьютексов и очередей ожидания
  2. Пайп ОС: отправка это write, получение это read из дескриптора
  3. Кольцевой буфер, индексы, очереди ждущих sudog и мьютексправильный ответ
  4. Связный список в куче: каждая отправка выделяет новый узел

Разбор

hchan содержит буфер фиксированного размера (кольцо), sendx/recvx, очереди sendq/recvq из структур sudog и lock. Если получатель уже ждёт, отправитель копирует значение напрямую в его переменную, минуя буфер, и будит его. Внутри обычный рантайм-мьютекс, так что lock-free это не так. ОС и пайпы не участвуют. Буфер выделяется один раз при make.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.