在这个Ruby线程化示例中使用队列而不是数组有什么意义吗?

在这个Ruby线程化示例中使用队列而不是数组有什么意义吗?,ruby,multithreading,queue,Ruby,Multithreading,Queue,从以下ruby文档中的线程化示例来看,它看起来与数组没有什么不同……那么在线程化ruby代码中何时使用队列覆盖数组呢 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.

从以下ruby文档中的线程化示例来看,它看起来与数组没有什么不同……那么在线程化ruby代码中何时使用队列覆盖数组呢

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=queue.new
producer=Thread.new do
5.3倍于我|
睡眠兰德(i)#模拟费用
如果队列为空,队列将暂停调用线程,直到推送数据

如果使用常规数组,则有可能一些
pop
s将使用实际数据,如果在某个点上运行的使用者任务多于生产者任务,则其中一些将仅获得
nil

如果队列为空,则将暂停调用线程,直到推送数据


如果使用常规数组,则有可能一些
pop
s会使用实际数据,如果在某个点上运行的使用者任务比生产者任务多,则其中一些会得到
nil

它们在功能上是相同的。可以使用数组实现堆栈或队列,但队列是单向数据存储。只是取决于情况,一个可能比另一个更清楚。在这种情况下,消费者似乎想要FIFO中的数据,因此推送和弹出是有用的。它们在功能上是相同的。可以使用数组实现堆栈或队列,但队列是单向数据存储。只是取决于情况,一个可能比另一个更清楚。在这种情况下,消费者似乎想要FIFO中的数据,因此推送和弹出是有用的。