我想在两个运行在两个不同内核上的函数之间建立一个Channel。以下代码不起作用:
c1=Channel(32)
@spawnat 2 put!(c1,1)
@spawnat 3 println(c1)
println告诉我核心3上的通道c1为空。我没有错。某种程度上,核心3上的功能看到的通道c1与核心2不同。
答案 0 :(得分:2)
Channel
用于协同例程之间的通信(又称绿色线程)。
对于分布式计算,通常使用remotecall
-请参见Julia manual的示例:
$ ./julia -p 2
julia> r = remotecall(rand, 2, 2, 2)
Future(2, 1, 4, nothing)
julia> s = @spawnat 2 1 .+ fetch(r)
Future(2, 1, 5, nothing)
julia> fetch(s)
2×2 Array{Float64,2}:
1.18526 1.50912
1.16296 1.60607
根据您的实际情况,您应该查看以下使用Julia进行分布式计算的库:
答案 1 :(得分:1)
这有效
const c1=RemoteChannel(()->Channel{Int}(32));
@spawnat 2 put!(c1,1)
@spawnat 3 println(take!(c1))