Здравствуйте, Sharov, Вы писали:
S> С другой стороны в выше процитированной док-ии сказано, что выч. на канале идут в порядке следования их case'ов.
Вычисления. Но не пробы каналов. Подозреваю, что тут есть существенная разница.
S> И как бэ неявно приоритет будет отдаваться первому, наверное.
Есть исходники, я читаю по ним (по 1.7.5).
Файл go/work/src/runtime/select.go, функция selectGoImpl(). В массиве pollorder генерируется перестановка, на каждый запуск select{} своя. По ней сортируется массив lockorder (код сортировки, как это у них принято, повторен и вшит прямо на месте в функцию). Дальше в порядке этого lockorder они двигаются по кейсам.
Никакого предпочтения первому — нет.
S> В целом было логично, что если первый case готов -- управление ему, иначе рандомный выбор.
Не логично. Логично или строго по порядку, или по явно прописанным приоритетам (я бы предпочёл схему, как в DNS SRV записях — есть priority и есть weight).
И ещё обязательно должна быть возможность таймаута. Её сейчас тоже нет.