Подтвердить что ты не робот

Какая разница между pub и mult в core.async? & образец usecase?

Я использовал core.async в течение некоторого времени, но избегал pub и mult, так как я не могу понять полезную утилиту из своей документации.

В частности, какова цель topic-fn и как вы будете использовать ее на практике?

Или, может быть, вы можете нанести теоретическое объяснение на следующий фиктивный подход. Я думаю, что это могло бы помочь много увидеть, как это работает на практике (если применимо вообще?)

Обнаружен фиктивный подход:

Для представления состояния будет несколько различных представлений. Чтобы позволить им действовать и реагировать на изменения состояния, я хотел бы иметь несколько каналов (на уровне приложений), которые, например, предназначены для state-changes и пользовательских входов (например, нажатия клавиш).

Каждый из представлений должен иметь возможность подключать (писать) ? к этому каналу приложения, чтобы они могли независимо реагировать на изменения. Также каждое из представлений должно быть возможно put что-то на канале состояния (но не на пользователе-в-chan).

4b9b3361

Ответ 1

Каналы в core.async - одиночные, одиночные. То есть любое сообщение идет только одному собеседнику. Это не работает в широковещательных ситуациях, когда многим блокам требуется копия каждого сообщения, помещенного в канал, тогда вам нужно что-то еще. Это то, что много полезно для. Многим, вероятно, также можно было бы назвать "трансляцию"

Pub - это mult + multimethods. topic-fn - это функция, которая применяется к каждому элементу ввода. Вывод функции решает тему сообщения. Входное сообщение затем передается только тем подписчикам, которые слушают эту тему.

Дополнительная информация содержится в примечаниях к моему разговору на последнем Conj, который можно найти здесь: https://github.com/halgari/clojure-conj-2013-core.async-examples/blob/master/src/clojure_conj_talk/core.clj#L398