代码拉取完成,页面将自动刷新
同步操作将从 Julia语言程序设计/bookexamples 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
using Distributed #
addprocs(4) # 增加4个远端Worker
jobs = RemoteChannel(()->Channel{Int}(32));
results = RemoteChannel(()->Channel{Tuple}(32))
@everywhere function do_work(jobs, results) # 在所有Worker中定义消费者函数
while true
job_id = take!(jobs) # 用for循环从输入通道jobs中读取任务数据
exec_time = rand()
sleep(exec_time) # 用sleep模拟处理过程
put!(results, (job_id, exec_time, myid())) # 将结果放入输出通道results中
end
end
function make_jobs(n) # 生产者
for i in 1:n
put!(jobs, i) # 往任务通道jobs中放入数据
end
end;
n = 12;
@async make_jobs(n); # 将生产者加入任务调度中
for p in workers() # 在远端Worker中异步地启动4个消费者,实现并行消费
@async remote_do(do_work, p, jobs, results)
end
@elapsed while n > 0 # 打印消费者执行后的结果
job_id, exec_time, where = take!(results) # 从结果通道中提取数据
println("$job_id finished in $(round(exec_time, digits=2)) seconds on worker $where")
global n = n - 1
end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。