通道:不同核心之间的通信

问题描述 投票:0回答:2

我想在两个不同的核心上运行两个函数之间的通道。以下代码不起作用:

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

println告诉我核心3上的通道c1是空的。我没有错。不知何故,核心3上的功能看到与核心2不同的信道c1。

julia channel
2个回答
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
投票

这有效

const c1=RemoteChannel(()->Channel{Int}(32));
@spawnat 2 put!(c1,1)
@spawnat 3 println(take!(c1))

Found here

© www.soinside.com 2019 - 2024. All rights reserved.