Ruby で 1000 フレームをできるだけ速く処理しようとしています。そのため、現在 1000 スレッド (フレームごとに 1 つ) を開始しています。結果は悪いです。大量のメモリを使用し、低速です。私のCPUはこれですhttp://ark.intel.com/products/67355/ 4つのスレッドをサポートしていると書かれています。(CPU あたり 2 つだと思いますか?)。一度に4つのRubyスレッドを開始し、それらが完了するまで待ってから、さらに4つなどを開始すると、処理を正しく完了するのに1000ではなく250の「ステップ」が必要になりますか?
編集:私のコードは今:
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 ミリ秒を期待していました。
これは、私のコードが失敗することを意味します。ここではスレッドに意味はありません。なんで?誰かが私にこれを説明できますか?