相关疑难解决方法(0)

Clojure core.async,CPU在超时后挂起.无论如何要正确杀死(go ..)块产生的宏线程?

基于core.async遍历示例,我在下面创建了类似的代码,以使用多个通道处理一些CPU密集型作业,超时为10秒.但是在主线程返回后,CPU使用率仍然保持在700%左右(8台CPU机器).我必须在emacs中手动运行nrepl-close来关闭Java进程.

是否有任何正确的方法来杀死(go ..)块产生的宏线程?我试过了!每个陈,但它不起作用.我希望在主线程返回后确保Java进程将CPU使用率恢复为0.

(defn [] RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB (do...   (str ...)))


(let [n 1000
      cs (repeatedly n chan)]
  (doseq [c cs] 
    (go 
     (>! c  (RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB ))))

  (dotimes [i n]
    (let [[result source] (alts!!  (conj cs (timeout 10000))) ]  ;;wait for 10 seconds for each job
      (if  (list-contains? cs source)  ;;if returned chan belongs to cs 
        (prn "OK JOB FINISHED " result)
        (prn "JOB TIMEOUT")
        )))

 (doseq [i cs]
   (close! i))  ;;not useful for "killing" macro thread

 (prn "JOBS ARE DONE")) …
Run Code Online (Sandbox Code Playgroud)

multithreading asynchronous clojure core.async

7
推荐指数
1
解决办法
1881
查看次数

Java:JVM可用的核心?

在Java中,有的方法Runtime.getRuntime().availableProcessors()有以下Javadoc:

返回Java虚拟机可用的处理器数.在特定的虚拟机调用期间,此值可能会更改.

价值如何实际改变?在什么情况下,JVM可用的处理器比物理安装的处理器少?

乔纳斯

java jvm core processors

6
推荐指数
2
解决办法
2957
查看次数