Re[9]: Go vs Erlang vs Elixir
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.02.17 06:12
Оценка: 1 (1)
Здравствуйте, Sharov, Вы писали:

S> С другой стороны в выше процитированной док-ии сказано, что выч. на канале идут в порядке следования их case'ов.


Вычисления. Но не пробы каналов. Подозреваю, что тут есть существенная разница.

S> И как бэ неявно приоритет будет отдаваться первому, наверное.


Есть исходники, я читаю по ним (по 1.7.5).
Файл go/work/src/runtime/select.go, функция selectGoImpl(). В массиве pollorder генерируется перестановка, на каждый запуск select{} своя. По ней сортируется массив lockorder (код сортировки, как это у них принято, повторен и вшит прямо на месте в функцию). Дальше в порядке этого lockorder они двигаются по кейсам.
Никакого предпочтения первому — нет.

S> В целом было логично, что если первый case готов -- управление ему, иначе рандомный выбор.


Не логично. Логично или строго по порядку, или по явно прописанным приоритетам (я бы предпочёл схему, как в DNS SRV записях — есть priority и есть weight).

И ещё обязательно должна быть возможность таймаута. Её сейчас тоже нет.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.