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つのスレッドしか実行されないため、実行時間の競合はありません。どうすればより速くできるか、またはなぜそれが起こっているのかについてのアイデアはありますか?