Что такое randomized select?

Middle+
424 просмотров
AFK Offer AI

Когда в select несколько case-ов готовы одновременно, Go выбирает один случайным образом. Это не баг, а фича — предотвращает starvation. Если бы выбирался всегда первый готовый case, остальные каналы могли бы вечно голодать. Рандомизация реализована внутри runtime.selectgo: массив case-ов перемешивается при каждом вызове select. Поэтому нельзя полагаться на порядок case-ов в select — Go намеренно не даёт приоритет. Если нужен приоритет, используй вложенные select или отдельные goroutine.

Следующий вопрос

Как работают spans и traces?