Als erstes sage ich, dass ich ein Problem habe, indem ich 1 Milliarde Ziffern von Pi berechne, den Faktor einer großen Zahl berechne oder Mergesort über eine große Liste führe. Ich möchte das Problem in kleinere Aufgaben aufteilen und jede der Aufgaben gleichzeitig ausführen und die Ergebnisse kombinieren. Vor allem, wie ist der Name dieser Art von Nebenläufigkeit und wie würden Sie es in Clojure tun?
In der aktuellen Clojure 1.4 könntest du dies erreichen, indem du vielleicht pmap
, pcalls
, oder pvalues
Die Funktion pmap
ist eine parallele Version von map
, während pcalls
und pvalues
nicht wirklich analoge nichtparallele Versionen haben (obwohl ich denke, list
ist eine "nicht parallele Version" von pvalues
).
Für die Probleme, die Sie beschreiben, klingt es jedoch so, als würden Sie eine parallele Version von reduce
verwenden wollen. Es gibt eine alte Version von Clojure 1.2 ( siehe hier ), die ich noch nie benutzt habe, deshalb kann ich nicht über seinen Nutzen sprechen.
Mit Clojure 1.5 kommt diese neue "Reducers" -Bibliothek, die Rich Hickey über hier . Hier scheint fold
eine parallele Version von reduce
zu sein.
Tags und Links clojure concurrency divide-and-conquer