Я пытаюсь вычислить размер папки параллельно. Может это наивный подход. Что я делаю, так это то, что я передаю вычисление каждого узла ветви (каталога) агенту. Все листовые узлы имеют свои размеры файлов, добавленные к my-size. Что ж, это не работает. :)
"сканирование" работает нормально, серийно. «pscan» печатает только файлы с первого уровня.
(def agents (atom []))
(def my-size (atom 0))
(def root-dir (clojure.java.io/file "/"))
(defn scan [listing]
(doseq [f listing]
(if (.isDirectory f)
(scan (.listFiles f))
(swap! my-size #(+ % (.length f))))))
(defn pscan [listing]
(doseq [f listing]
(if (.isDirectory f)
(let [a (agent (.listFiles f))]
(do (swap! agents #(conj % a))
(send-off a pscan)
(println (.getName f))))
(swap! my-size #(+ % (.length f))))))
Ты хоть представляешь, что я сделал не так?
Спасибо.