2013-11-08 4 views
6

Просто экспериментируйте с go недавно. Мне было интересно, что произойдет, если у вас есть оператор выбора, ожидающий связи по нескольким каналам, и если сообщение поступит в то же время по двум или более каналам. Как выбрать, какой канал будет принимать, если все сообщения приходят одновременно?Golang channels select statement

Спасибо!

+3

Спецификация Golang действительно стоит хорошего чтения. По крайней мере, проскользните через него один раз, а затем прочитайте более подробно в областях, которые вы не знакомы. Вы будете рады, что вы это сделали :) – Brenden

ответ

17

От the spec:

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

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

+0

Спасибо, может быть, я действительно должен прочитать спецификацию lol ... – Feras

+3

Этот недетерминизм является важной частью CSP, на которой Go основывает свои каналы. Параллельные действия строго детерминированы в CSP, что противоречит интуиции. Только когда выбор сделан (т. Е. Выбирается), появляется недетерминизм. –