Чем отличается nil канал от закрытого, открытого и буферизированного в Go?
В Go каналы бывают нескольких типов, и они отличаются по состоянию и поведению:
Читать ответПодготовка к интервью
25 вопросов с ответами по теме «Каналы в Go»
Что проверяют на интервью
Подборка о передаче данных и синхронизации горутин через каналы. Вопросы охватывают состояния канала, поведение select, завершение работы и небольшие задачи на конкурентное выполнение.
Каталог
В Go каналы бывают нескольких типов, и они отличаются по состоянию и поведению:
Читать ответДанный код на Go создает буферизированный канал c с размером буфера 1 и выполняет цикл из 3 итераций, в каждой из которых выполняется select с тремя случаями:
Читать ответПоведение функции select в Go частично предсказуемо, но в случае, когда несколько каналов готовы к операции одновременно, выбор канала происходит случайным образом (рандомно).
Читать ответМожно:
Читать ответВ горутине воркеров для чтения из канала обычно используется конструкция for range по каналу. Это позволяет последовательно получать значения из канала до его закрытия, что удобно для обработки задач в воркерах.
Читать ответДля ограничения количества одновременно работающих горутин в Go часто используют семафоры или буферизованные каналы.
Читать ответОткрытый, закрытый и nil-канал ведут себя по-разному. Блокируется горутина; select позволяет добавить отмену или неблокирующую ветку.
Читать ответРешение fan-in через отдельные горутины и WaitGroup. Выход закрывается только после всех отправок, а ok выводится после завершения range.
Читать ответЧем отличаются буферизированный и небуферизированный каналы и какой из них быстрее передаёт данные? Каналы Go — средство синхронизации и обмена данными между goroutine Небуферизированный канал не хранит элементы:…
Читать ответКак работает context.Done() и почему закрытие канала получают все горутины? context.Done() — канал для наблюдения за отменой контекста возвращает канал, закрываемый при отмене или завершении заданного времени одно…
Читать ответЧто представляет собой sync.Cond и когда он предпочтительнее каналов? sync.Cond — примитив условной синхронизации в Go с его помощью можно ожидать наступления заданного условия при организации конкурентного выполнения…
Читать ответЧто произойдёт при попытке записи в закрытый канал Go? Конкурентность в Go и каналы (channels) отправка данных в закрытый канал приводит к панике (panic) паника представляет собой ошибку runtime, из-за которой…
Читать ответ