我正在构建 Ruby 应用程序。我有一组想要灰度的图像。我的代码曾经是这样的:
def Tools.grayscale_all_frames(frames_dir,output_dir)
number_of_frames = get_frames_count(frames_dir)
img_processor = ImageProcessor.new(frames_dir)
create_dir(output_dir)
for i in 1..number_of_frames
img_processor.load_image(frames_dir+"/frame_%04d.png"%+i)
img_processor.greyscale_image
img_processor.save_image_in_dir(output_dir,"frame_%04d"%+i)
end
end
线程代码后:
def Tools.greyscale_all_frames_threaded(frames_dir,output_dir)
number_of_frames = get_frames_count(frames_dir)
img_processor = ImageProcessor.new(frames_dir)
create_dir(output_dir)
greyscale_frames_threads = []
for frame_index in 1..3
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 "Starting Threads"
greyscale_frames_threads.each { |thread| thread.join }
end
我期望的是为每个图像生成一个线程。我有 1000 张图片。分辨率为 1920*1080。所以我看待事物的方式是这样的。我有一组线程,我称之为 .join 。所以 join 将获取所有线程并一个接一个地启动它们?这是否意味着它将等到线程 1 完成然后启动线程 2?那么多线程有什么意义呢?
我想要的是这样的:
同时运行所有线程,而不是一个接一个地运行。所以从数学上讲,它会在完成 1 帧的同时完成所有 1000 帧,对吧?
也有人可以解释一下 .join 的作用吗?据我了解 .join 将停止主线程,直到您的线程完成或完成?如果不使用 .join,则线程将在后台运行,而主线程将继续。
那么使用.join 有什么意义呢?我希望我的主线程继续运行并让其他线程在后台执行操作?
感谢您的帮助/澄清!