erlang, clojure 天生对并发真的很友好,比如 clojure
(defn foo1
[]
(println "f1 start")
(Thread/sleep 500)
(println "f1 end")
"f1")
(defn foo2
[]
(println "f2 start")
(Thread/sleep 1000)
(println "f2 end")
"f2")
;; 并行
(time
(let [f2 (future (foo2))
f1 (future (foo1))]
(str @f1 @f2)))
;; f2 start
;; f1 start
;; f1 end
;; f2 end
;; "Elapsed time: 1006.12004 msecs"
;; "f1f2"
;; 串行
(time
(let [f2 (foo2)
f1 (foo1)]
(str f1 f2)))
;; f2 start
;; f2 end
;; f1 start
;; f1 end
;; "Elapsed time: 1505.08541 msecs"
;; "f1f2"
但这并不能掩盖,没有 debugger,对程序员不友好的缺点。