如果 Ruby 方法创建线程,但在方法中连接它们,从函数式编程的角度来看,这是否仍被视为副作用?我正在使用的实现是 YARV Ruby,其中线程由操作系统创建,尽管使用 GVL(全局 VM 锁)。
创建线程的原因是进行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