我对 ruby 多线程相当陌生,对如何开始感到困惑。我目前正在构建一个应用程序,它需要获取很多图像,所以我想在不同的线程中进行。我希望程序按照下面的代码执行。
问题:我在这里看到的问题是 bar_method 将更快地完成获取并且线程将结束,因此事情将继续添加到队列中但不会被处理。是否有任何可能的同步方式可以提醒 bar_method 线程新项目已添加到队列中,如果 bar_method 确实提前完成,它应该进入睡眠状态并等待新项目添加到队列中?
def foo_method
queue created - consists of url to fetch and a callback method
synch = Mutex.new
Thread.new do
bar_method synch, queue
end
100000.times do
synch.synchronize do
queue << {url => img_url, method_callback => the_callback}
end
end
end
def bar_method synch_obj, queue
synch_obj.synchronize do
while queue isn't empty
pop the queue. fetch image and call the callback
end
end
end