Выбор ответа Senior Каналы и select обновлено
Устройство канала в рантайме
Вопрос
Что верно про внутреннее устройство канала (runtime.hchan)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Кольцевой буфер, индексы, очереди ждущих sudog и мьютекс. hchan содержит буфер фиксированного размера (кольцо), sendx/recvx, очереди sendq/recvq из структур sudog и lock.
Варианты ответа
- Lock-free очередь на атомиках, без мьютексов и очередей ожидания
- Пайп ОС: отправка это write, получение это read из дескриптора
- Кольцевой буфер, индексы, очереди ждущих sudog и мьютексправильный ответ
- Связный список в куче: каждая отправка выделяет новый узел
Разбор
hchan содержит буфер фиксированного размера (кольцо), sendx/recvx, очереди sendq/recvq из структур sudog и lock. Если получатель уже ждёт, отправитель копирует значение напрямую в его переменную, минуя буфер, и будит его. Внутри обычный рантайм-мьютекс, так что lock-free это не так. ОС и пайпы не участвуют. Буфер выделяется один раз при make.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.