渠道:不同核心之间的沟通

时间:2019-03-05 22:55:21

标签: julia channel

我想在两个运行在两个不同内核上的函数之间建立一个Channel。以下代码不起作用:

c1=Channel(32)   
@spawnat 2 put!(c1,1)
@spawnat 3 println(c1)

println告诉我核心3上的通道c1为空。我没有错。某种程度上,核心3上的功能看到的通道c1与核心2不同。

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))

Found here