Введение в каналы в Rust
Канал передает значения из одного места программы в другое через общую очередь. Один участок кладет данные, другой забирает их по мере готовности. Так удобно обмениваться результатами между потоками без общей переменной, которую все правят сразу.
В стандартной библиотеке для этого есть модуль с неблокирующей очередью между отправителем и приемником. Пара создается одним вызовом: отправитель может ссылаться на несколько копий, а приемник один. Пока жив хотя бы один отправитель, приемник может ждать следующее значение.
И отправка, и прием возвращают результат операции. Успешная отправка кладет значение в очередь. Прием ждет, пока значение появится, или сообщает, что отправителей больше нет. Такой ответ означает конец канала, а не поломку переданных данных.
Дальше создадим пару, положим число в очередь, заберем его на другой стороне, увидим конец после исчезновения отправителей, подключим несколько потоков с копиями отправителя и закрепим прием на задачах.