Let's say I have a corpus of computations that I want to run asynchronously using core.async, but unfortunately a few of the functions depend on the output of other functions. How do I go about structuring this cleanly in my code, while also getting the best performance?
A few potential solutions I've come across are
- Prismatic's Graph - seems reasonable, although I haven't tested it with core.async channels; the fact that it requires the use of
fnk
is a little off-putting for me because it requires buying into their DSL for function definitions, but if that's the best solution then I don't mind. - Javelin cells - only for ClojureScript (currently) and uses FRP instead of CSP as the implementation, but it does a very good job of modeling dependencies among computations via formula cells.
- Onyx - made for distributed computation (as a competitor to Apache Storm, etc) but has a "workflow" abstraction that handles dependencies between computations and works with core.async. This seems like the closest fit to my problem domain, but I'm not sure if I need the overhead of all the cluster management features.
What's the canonical solution for this problem?
Edit: added Onyx