gpt4 book ai didi

ruby - 在此 Ruby 线程示例中使用队列而不是数组有什么意义吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:53 25 4
gpt4 key购买 nike

从 ruby​​ 文档中的以下线程示例来看,它看起来像 Queue与 Array 没有什么不同...所以我什么时候可以在线程 Ruby 代码中使用 Queue over Array?

require 'thread'

queue = Queue.new

producer = Thread.new do
5.times do |i|
sleep rand(i) # simulate expense
queue << i
puts "#{i} produced"
end
end

consumer = Thread.new do
5.times do |i|
value = queue.pop
sleep rand(i/2) # simulate expense
puts "consumed #{value}"
end
end

consumer.join

最佳答案

Queue#pop如果队列为空,将暂停调用线程,直到数据被推送。

如果您使用常规数组,则有可能一些 pop 会消耗实际数据,而其中一些只会得到 nil 如果有运行的消费者任务多于生产者任务的点。

关于ruby - 在此 Ruby 线程示例中使用队列而不是数组有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34800494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com