Каналы каналов в Go | OTUS

Каналы каналов в Go

Канал представляет собой первоклассное значение, которое можно аллоцировать и передавать куда угодно по аналогии с любым другим значением. Возможность использовать каналы -- одно из важных свойств языка программирования Go. К примеру, это свойство применяется при реализации безопасного параллельного демультиплексирования.

Рассмотрим следующий код:

4-20219-dd608d.png

Handle -- идеализированный обработчик для запроса, однако не определен тип, который он обрабатывает. Если же данный тип включает в себя канал, по которому можно отвечать, тогда каждый клиент сможет предоставить свой путь для ответа. Ниже -- схематическое определение типа Request:

1-20219-f6d2b6.png

Итак, клиент предоставляет функцию с аргументами, плюс канал внутри объекта запроса, по которому возможно получить ответ.

2-20219-ee3f6e.png

При этом на стороне сервера функция обработчика (handle function) будет единственным, что меняется.

3-20219-f7bfa3.png

Да, чтобы сделать данный пример более реалистичным, нужно еще многое выполнить, однако сам по себе код -- основа для параллельной неблокирующей RPC системы при ограниченной скорости пропуска сообщений, причем здесь нет и следа мьютекса.

По материалам https://golang-blog.blogspot.com/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто