> Что происходит при чтении из пустого буферизованного канала в Go и записи в него другой горутиной (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
При чтении из пустого буферизованного канала горутина блокируется до тех пор, пока другая горутина не запишет в него значение. Как только запись происходит, читающая горутина немедленно получает это значение и продолжает выполнение. Если канал буферизован и не пуст, чтение не блокируется - извлекается первый элемент из буфера.
Пример:
GOch := make(chan int, 2) // буферизованный канал ёмкостью 2go func() {time.Sleep(100 * time.Millisecond)ch <- 42}()val := <-ch // блокируется, пока другая горутина не запишет 42fmt.Println(val) // 42
Важно: чтение из пустого небуферизованного канала также блокируется, но в этом случае требуется одновременная готовность и читающей, и пишущей горутины. При буферизации блокировка снимается, как только в буфере появляется хотя бы один элемент.
> Похожие задачи по backend
В чем отличие планировщика Go от планировщика операционной системы
Можно ли использовать map одновременно из нескольких горутин без синхронизации
Нужно ли использовать мьютексы для синхронизации при работе с каналами и горутинами в Go
Что такое снимок данных в PostgreSQL и как он работает
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью