Rubyメソッドがスレッドを作成するが、メソッド内でそれらを結合する場合でも、関数型プログラミングの観点からは副作用と見なされますか?私が使用している実装はYARVRubyで、GVL(Global VM Lock)を使用していても、オペレーティングシステムによってスレッドが作成されます。
スレッドが作成される理由はsystem
、とにかく副作用である呼び出しを行うためですが、スレッドが副作用であるかどうかを言う人に出会ったことはありません。
このための簡略化された擬似コードは、次のようになります。
def run_tasks
input_files = (1..4).map {|i| "input_#{i}"}
output_files = (1..4).map {|i| "output_#{i}"}
threads = [input_files, output_files].transpose.map |input_file, output_file|
# system itself is a side effect
Thread.new { system(["sub_program.rb", input_file, output_file]) }
end
threads.map(&:join)
end