前几天学clojure的通信时看到对clojure.core.async/chan 这个管道的操作有两种,分别是阻塞的放入和取出:(clojure.core.async/>!!)与(clojure.core.async/<!!)
还有异步的放入和取出(clojure.core.async/>!)和(clojure.core.async/<!)
平时对Channel的操作都是阻塞的,请问有没有必要对Channel做异步操作?
加上@async
就是异步
julia> c=Channel{Int}()
Channel{Int64}(sz_max:0,sz_curr:0)
julia> @async put!(c,1)
Task (runnable) @0x0000000011794b90
julia> c
Channel{Int64}(sz_max:0,sz_curr:1)
julia> @async take!(c)
Task (runnable) @0x000000001291f3d0
julia> fetch(ans)
1
julia> c
Channel{Int64}(sz_max:0,sz_curr:0)
需要同步还是异步要看使用场景