Предположим, у меня есть состав вычислений, который я хочу запустить асинхронно с помощью core.async, но, к сожалению, некоторые из функций зависят от вывода других функций. Как мне организовать структурирование этого в моем коде, а также получить лучшую производительность?Как четко структурировать зависимости между каналами core.async?
Несколько возможных решений я пришел через это
- Prismatic's Graph - кажется разумным, хотя я не проверял его с core.async каналами; тот факт, что он требует использования
fnk
, немного уступает мне, потому что он требует покупки в DSL для определения функций, но если это лучшее решение, то я не против. - Javelin cells - только для ClojureScript (в настоящее время) и использует FRP вместо CSP в качестве реализации, но он очень хорошо выполняет моделирование зависимостей между вычислениями через ячейки формулы.
- Onyx - предназначен для распределенных вычислений (в качестве конкурента Apache Storm и т. Д.), Но имеет абстракцию рабочего процесса, которая обрабатывает зависимости между вычислениями и работает с core.async. Это похоже на наиболее подходящий для моего проблемного домена, но я не уверен, что мне нужны накладные расходы на все функции управления кластерами.
Что такое каноническое решение этой проблемы?
Edit: добавлена Onyx
Было бы [обещание] (https: // clojuredocs.org/clojure.core/обещание) работать? –
Любые конкретные причины, по которым вы не считаете, что ваш вопрос ответил? –