我下面的代碼:如何充分利用所有的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%的可能處理週期)。 –