Diciamo che ho un corpus di calcoli che voglio eseguire in modo asincrono utilizzando core.async, ma sfortunatamente alcune delle funzioni dipendono dall'output delle funzioni . Come faccio a strutturare questo in modo pulito nel mio codice, ottenendo anche le migliori prestazioni?In che modo si strutturano chiaramente le dipendenze tra i canali core.async?
alcune soluzioni potenziali che ho incontrato sono
- Prismatic's Graph - sembra ragionevole, anche se non ho provato con canali core.async; il fatto che richieda l'uso di
fnk
è un po 'scoraggiante per me perché richiede l'acquisto nel loro DSL per le definizioni di funzione, ma se questa è la soluzione migliore allora non mi dispiace. - Javelin cells - solo per ClojureScript (attualmente) e utilizza FRP anziché CSP come implementazione, ma svolge un ottimo lavoro di modellazione delle dipendenze tra i calcoli tramite celle formula.
- Onyx - creato per il calcolo distribuito (come concorrente di Apache Storm, ecc.) Ma ha un'astrazione di "flusso di lavoro" che gestisce le dipendenze tra i calcoli e funziona con core.async. Questo mi sembra il più adatto al mio dominio del problema, ma non sono sicuro di aver bisogno del sovraccarico di tutte le funzionalità di gestione dei cluster.
Qual è la soluzione canonica per questo problema?
Edit: aggiunto Onyx
Sarebbe un [promessa] (https: // clojuredocs.org/clojure.core/promise) lavoro? –
Qualche ragione particolare per cui non consideri la risposta alla tua domanda? –