我已经开始使用Clojure core.async库。我发现CSP、通道和go块的概念非常容易使用。但是,我不确定自己是否使用得正确。下面是我的代码 -
我有预定义的(矩阵)向量,名称为符号“
基本上,我试图通过将程序片段拆分成异步进程来加速计算时间。请问这样做的方式正确吗?
(def x-ch (chan))
(def y-ch (chan))
(def w1-ch (chan))
(def w2-ch (chan))
; they all return matrices
(go (>! x-ch (Mat/* x (map #(/ 1.0 %) (max-fold x)))))
(go (>! y-ch (Mat/* y (map #(/ 1.0 %) (max-fold y)))))
(go (>! w1-ch (gen-matrix 200 300)))
(go (>! w2-ch (gen-matrix 300 100)))
(let [x1 (<!! (go (<! x-ch)))
y1 (<!! (go (<! y-ch)))
w1 (<!! (go (<! w1-ch)))
w2 (<!! (go (<! w2-ch)))]
;; do stuff w/ x1 y1 w1 w2
)
我有预定义的(矩阵)向量,名称为符号“
x
”和“y
”。在使用它们之前,我需要修改这两个向量。这两个向量都很大。我还需要生成两个随机矩阵。由于“go
”宏启动计算是异步的,因此我将所有四个计算任务拆分成单独的go块,并将结果放入通道中。然后我使用let块从通道中获取值并将它们存储到符号中。它们都使用阻塞的“<!!
”“take”函数,因为它们在主线程上执行。基本上,我试图通过将程序片段拆分成异步进程来加速计算时间。请问这样做的方式正确吗?