Załóżmy, że mam zbiór obliczeń, które chcę uruchomić asynchronicznie za pomocą core.async, ale niestety kilka funkcji zależy od wyjścia z innych funkcji. W jaki sposób mam zamiar uporządkować to wszystko w moim kodzie, jednocześnie uzyskując najlepszą wydajność?W jaki sposób jednoznacznie struktura zależności między kanałami core.async?
Kilka możliwych rozwiązań Natknąłem się
- Prismatic's Graph - wydaje się rozsądne, chociaż nie testowałem go z core.async kanałów; fakt, że wymaga użycia
fnk
, jest dla mnie trochę zniechęcający, ponieważ wymaga zakupu w DSL dla definicji funkcji, ale jeśli to najlepsze rozwiązanie, to nie mam nic przeciwko. - Javelin cells - tylko dla ClojureScript (obecnie) i używa FRP zamiast CSP jako implementacji, ale wykonuje bardzo dobrą robotę polegającą na modelowaniu zależności między obliczeniami za pomocą komórek formuły.
- - stworzone do obliczeń rozproszonych (jako konkurencja dla Apache Storm, itp.), Ale ma abstrakcję "workflow", która obsługuje zależności między obliczeniami i działa z core.async. Wydaje się to być najbliższym mojemu problematycznemu obszarowi, ale nie jestem pewien, czy potrzebuję nakładu wszystkich funkcji zarządzania klastrem.
Jakie jest rozwiązanie kanoniczne dla tego problemu?
Edit: dodano Onyx
Czy [obietnica] (https: // clojuredocs.org/clojure.core/promise) działa? –
Jakiś szczególny powód, dla którego nie uważasz odpowiedzi na twoje pytanie? –