我在 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 正在执行的函数中使用 sleep 或 yield 的论点?如果我理解正确,在这种情况下,我的每个工人都有自己的线程,因此应该没有副作用。
如果 Executor 使用的是 FixedThreadPool:
(Executors/newFixedThreadPool 1000)
事情变得更加复杂,因为线程在工作完成之前不会返回到池中,这意味着如果线程处于睡眠状态,其他排队的工作人员将需要更长的时间才能完成。
在这种情况下,我对线程的理解是否正确?
(注意:我怀疑我的设计实际上是错误的,但只是想确保我在正确的页面上)