select
В некоторых ситуациях может потребоваться запустить множество go-подпрограмм, и каждую с собственным каналом передачи данных. Контролировать взаимодействия с ними можно с помощью инструкции select
.
Синтаксис
В инструкции select проверяется возможность выполнения каждой инструкции передачи или приема, в порядке сверху вниз. Если какие-нибудь из них могут быть выполнены (то есть не будут заблокированы), из них произвольно выбирается одна для продолжения работы.
Если все потоки заблокированы, то, при наличии блока в default, будет вызван он и следующая инструкция за select. Если блока default нет, то будет дожидаться первый освободившийся канал.
Как вывод: с default select - не блокируется, без default - блокируется.
Примеры
Пример 1
Создаем 6 небуфферезированных каналов, в которые случайным образом в цикле запихиваем значения без перерыва (и каналы сразу блокируются)
Считывает 36 булевых значений и выводим соотв номер канала
Пример 2
Дорогостоящая операция
Запуск двух дорогостоящих операций
Last updated