我想在两个不同的核心上运行两个函数之间的通道。以下代码不起作用:
c1=Channel(32)
@spawnat 2 put!(c1,1)
@spawnat 3 println(c1)
println告诉我核心3上的通道c1是空的。我没有错。不知何故,核心3上的功能看到与核心2不同的信道c1。
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的分布式计算库:
这有效
const c1=RemoteChannel(()->Channel{Int}(32));
@spawnat 2 put!(c1,1)
@spawnat 3 println(take!(c1))