我下面的代码:如何充分利用所有的CPU核心Clojure中
(defn compile-report [id]
(let [a (gen-first-part id)
b (gen-second-part id)
c (gen-third-part id)
d (gen-fourth-part id)]
(conj a b c d)))
每“GEN-X-部分”功能是CPU密集型。据我了解,let表单将在单个线程上串行运行这些计算。如果我有一台核心机器,那么在它们自己的线程上运行每个核心机器都没有意义,因为它们都是cpu绑定的。不过,我有一台4核心机器。我怎样才能利用这些核心中的每一个,并将这些功能分配到它自己的核心?谢谢。
核心异步也可以使用您的机器的所有核心,而不会阻塞。 –
@ChrisMurphy - 它是如何做到的?每个线程只能按顺序处理代码,并且如果遇到(例如)I/O绑定函数,那么该线程肯定会阻塞,直到函数返回。 – Zuriar
每个go block都会尝试使用一个单独的线程,并且他们都将同时进行。随着风扇飞速旋转,您可以轻松让您的多核计算机“最大化”(使用100%的可能处理周期)。 –