clojure プログラム内で作成されているかなりの数のスレッドがあります。
(import '(java.util.concurrent Executors))
(def *pool*
(Executors/newCachedThreadPool))
(defn do-something []
; work
Thread/sleep 200
; repeat)
(dotimes [i 10000]
(.submit *pool* do-something))
私にとってはJVMの間でしばらく経ちましたが、エグゼキューターによって実行されている関数内でスリープまたは収量を使用することに反対する議論があるかどうか、基本的にここで疑問に思っていますか? 私が正しく理解していれば、この場合、すべてのワーカーが独自のスレッドを持っているため、副作用はないはずです。
Executor が FixedThreadPool を使用している場合:
(Executors/newFixedThreadPool 1000)
スレッドは作業が完了するまでプールに返されないため、状況はさらに複雑になります。つまり、スレッドがスリープ状態の場合、キューに入れられた他のワーカーの完了に時間がかかります。
この場合のスレッド化についての私の理解は正しいですか?
(注:私のデザインは実際には間違っていると思いますが、正しいページにいることを確認したいだけです)