Как работает select statement внутри?

Senior
390 просмотров
AFK Offer AI

select компилируется в вызов runtime.selectgo(). Сначала случайно перемешиваются case-ы (чтобы не было starvation). Потом для каждого case проверяется, можно ли выполнить операцию сразу. Если да — выполняется и всё. Если нет — горутина создаёт sudog для каждого case и встаёт в очередь каждого канала. Когда любой канал готов, соответствующий sudog пробуждается, остальные sudog удаляются из очередей. Блокировка каналов происходит в определённом порядке (по адресу) чтобы избежать deadlock при lock ordering.

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

Что такое amortized complexity?