1

IO/計算を行う機能があります。ここからそこに〜300MBをコピーするデモ関数を作成しました。すぐに参加するスレッドで実行すると、スレッドなしで実行する場合よりもはるかに遅くなります。私はチェックしました:

def cp
  start = Time.now
  FileUtils.cp_r("C:/tmp", "C:/tmp1")
  fin = Time.now - start
  p fin
end

これらを比較すると:

cp

Thread.new{cp}.join

最初のcp呼び出しは、スレッド化された呼び出しより常に 2 ~ 4 倍高速です。私がそうしても同じことが起こります

cp

Thread.new{cp}

sleep 200

GILなども聞いたことがありますが、ここでは一度に1つのスレッドしか実行されないため、実行時間の競合はありません。どうすればより速くできるか、またはなぜそれが起こっているのかについてのアイデアはありますか?

4

1 に答える 1