在这个Ruby线程化示例中使用队列而不是数组有什么意义吗?
从以下ruby文档中的线程化示例来看,它看起来与数组没有什么不同……那么在线程化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.
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中的数据,因此推送和弹出是有用的。