我正在尝试使用 Ruby 尽可能快地处理 1000 帧。所以我目前启动了 1000 个线程(每帧一个)。结果很糟糕。它使用大量内存并且速度很慢。我的 CPU 是这个http://ark.intel.com/products/67355/ 它说它支持 4 个线程。(我猜每个 CPU 2 个?)。因此,如果我一次启动 4 个 Ruby 线程,等到它们完成,然后再启动 4 个等,等等,将需要 250 个“步骤”来完成处理,而不是 1000 个?
编辑:我现在的代码:
beginning_time = Time.now
limit=1
for frame_index in 1..limit
greyscale_frames_threads << Thread.new(frame_index) { |frame_number|
puts "Loading Image #{frame_number}"
img_processor.load_image(frames_dir+"/frame_%04d.png"%+frame_number)
img_processor.greyscale_image
img_processor.save_image_in_dir(output_dir,"frame_%04d"%+frame_number)
puts "Greyscaled Image #{frame_number}"
}
end
puts "Joining Threads"
greyscale_frames_threads.each { |thread| thread.join } #this blocks the main thread
end_time = Time.now
puts "Time elapsed #{(end_time - beginning_time)*1000} milliseconds"
现在对于 limit=1 这就是我得到的:
经过的时间 23504.805999999997 毫秒
现在对于 limit=2 这就是我得到的:
经过的时间 53465.676 毫秒
对于 limit=2 我期待 23504.805999999997 毫秒。
这意味着我的代码只是失败了。在这里,线程没有意义。为什么?有人可以向我解释一下吗?