Проверяет знание блокировок и производительности разных типов каналов.
Небуферизированный канал (cap=0) синхронизирует горутины: отправитель блокируется до приёма, буферизированный (cap>0) позволяет передавать без блокировки до заполнения. Для одиночной передачи без контеншенов небуферизированный быстрее, так как исключает работу с буфером, но при высокой конкуренции буферизированный снижает блокировки и даёт лучшую производительность.
Небуферизированный (make(chan T)):
send ждёт recv.
Минимальный оверхед, но жёсткая синхронизация.
Буферизированный (make(chan T, n)):
send не блокирует до заполнения буфера.
Подходит для разгрузки шины между producer/consumer.
Производительность:
Для точечного обмена без конкуренции небуферизированный быстрее.
При множестве производителей и потребителей буферизированный снижает взаимные блокировки.
Пример выбора:
cap=1 для ускорения передачи без полного буфера.