julia - Channel:不同核之间的通信
问题描述
我想在两个不同内核上运行的两个函数之间有一个通道。以下代码不起作用:
c1=Channel(32)
@spawnat 2 put!(c1,1)
@spawnat 3 println(c1)
println 告诉我核心 3 上的通道 c1 是空的。我没有错误。不知何故,核心 3 上的功能看到与核心 2 不同的通道 c1。
解决方案
Channel
用于协同程序之间的通信(又名绿色线程)。
对于通常使用的分布式计算- 请参阅Julia 手册remotecall
中的此示例:
$ ./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 进行分布式计算的库:
- SharedArrays - 在同一主机上处理的共享内存
- DistributedArrays.jl - 在不同主机上的不同进程之间共享数据
- ParallelDataTransfer.jl - 在进程之间发送数据。