2

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 ミリ秒を期待していました。

これは、私のコードが失敗することを意味します。ここではスレッドに意味はありません。なんで?誰かが私にこれを説明できますか?

4

2 に答える 2