並列ライブラリ (名前空間 * **parallel** *、parallel.clj内) は、ForkJoinライブラリ をラップしています。このライブラリは現在非推奨です。
基本的な考え方は、Clojureコレクション、そして最も効率的なベクターは、関数parを使用してこのライブラリで使用するために並列配列に変換できるということです。ただし、ほとんどの関数はコレクションを受け取り、必要に応じて * **par** * を呼び出すため、通常は、bound/filter/map操作をアタッチするために明示的にparを呼び出すだけで済みます。
並列配列は、実現/計算の前に境界、フィルター、マッピング関数の添付をサポートします。これは、配列に対するいくつかの操作 (pvec/psort/pfilter-nils/pfilter-dupes) の結果として発生します。シーケンス、マップ、フィルターで通常行われるように、複合操作を段階的に実行するのではなく、 * **par** * に操作を提供することにより、マップとフィルターがアタッチされ、構成されます。アタッチメントには順序の感度があることに注意してください。境界はフィルターの前にあり、マッピングの前にあります。その後、すべての操作は、配列が実現されたとき、またはpreduce/pmin/pmaxなどの集計操作を実行するために、複数のスレッドとfork-joinによってサポートされる高度なワークスティーリングシステムを使用して並列に実行されます。
並列配列は、pvecを使用してClojureベクターに実現できます
(load-file "src/parallel.clj")
(refer 'parallel)
(def f (vec (take 20 (repeatedly #(rand-int 20)))))
f
-> [11 7 10 9 4 1 4 18 15 13 10 7 0 9 16 6 19 11 14 7]
;return value/index pairs of all entries < their index, in parallel
(pvec (par f :filter-index < :map-index vector))
-> [[1 5] [4 6] [7 11] [0 12] [9 13] [6 15] [11 17] [14 18] [7 19]]