Оператор выбора каналов Golang

Просто недавно экспериментировал с го. Мне было интересно, что произойдет, если у вас есть оператор select, ожидающий связи по нескольким каналам, и если сообщение придет ОДНОВРЕМЕННО по двум или более каналам. Как выбор будет определять, какой канал принимать, если все сообщения приходят одновременно?

Спасибо!


person Feras    schedule 08.11.2013    source источник
comment
Спецификацию Golang действительно стоит внимательно прочитать. По крайней мере, пролистайте его один раз, а затем прочтите более подробно в незнакомых вам областях. Вы будете рады, что сделали :)   -  person Brenden    schedule 09.11.2013


Ответы (1)


Из спецификации:

Если может продолжаться несколько случаев, делается единый псевдослучайный выбор, чтобы решить, какое единственное сообщение будет выполнено.

Таким образом, выбор не является детерминированным.

person nemo    schedule 08.11.2013
comment
Этот недетерминизм - важная часть CSP, на которой Go строит свои каналы. Параллельные действия строго детерминированы в CSP, что противоречит интуиции. Недетерминизм проявляется только тогда, когда сделан выбор (т. Е. Выбор). - person Rick-777; 11.11.2013
comment
CSP развивалась поэтапно в конце 70-х - начале 80-х годов. Occam был непосредственно основан на CSP, но включал только недетерминированный выбор; детерминированный выбор не нужен. В этом отношении Го похож на Оккама. - person Rick-777; 26.05.2020