Ho due funzioni costose che sono indipendenti. Voglio eseguirli in parallelo. Non voglio trattare con il futuro e così via (sono nuovo di Clojure e facilmente confuso).Dead simple Fork-Join Join in Clojure
Sto cercando un modo semplice per eseguire contemporaneamente due funzioni. Voglio che funzioni come il seguente
(defn fn1 [input] ...) ; costly
(defn fn2 [input] ...) ; costly
(let [[out1 out2] (conc (fn1 x) (fn2 y))] ...)
Voglio che questo restituisca un vettore con una coppia di uscite. Dovrebbe tornare solo una volta che entrambi i thread sono terminati. Idealmente dovrebbe funzionare per qualsiasi numero di input. Sospetto che questo sia un modello semplice.
Quando dici che non vuoi avere a che fare con i futures, vuol dire che non vuoi che i futures vengano usati anche nella funzione "conc"? È idiomatico usare uno dei primitivi della concurrency Clojure in questo caso, per quanto ne so, anche se potrebbero essere nascosti da voi tramite l'incapsulamento in "conc". – JohnJ
Verranno utilizzati alcuni primitivi di concorrenza. conc può essere sofisticato quanto vuoi. Semplicemente non voglio occuparmi di loro come utente. Sospetto che si tratti di "iniziare un futuro per ogni input", "attendere ogni output", "return". Forse dovrà essere una macro, non è sicuro. – MRocklin
Definitivamente una macro se si desidera rinviare le valutazioni degli argomenti da conc ai thread. Sto lavorando alla macro def'n ora. – JohnJ