gpt4 book ai didi

ruby - 从 FP 的角度来看,在 YARV Ruby 中创建线程通常被视为副作用吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:26 24 4
gpt4 key购买 nike

如果 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

最佳答案

The passage of time is seldom considered a side-effect ,因此使用线程来减少发生时间并不是副作用。这类似于使用内存来提高性能,这也不是副作用,即使它修改了隐藏状态。

请注意,input_files.zip(output_files)[input_files, output_files].transpose 一样有效,并且可以更好地传达您的意图。

关于ruby - 从 FP 的角度来看,在 YARV Ruby 中创建线程通常被视为副作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com