首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FP的角度来看,在YARV Ruby中创建线程通常被视为一种副作用吗?

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

Stack Overflow用户
提问于 2012-10-09 07:19:24
回答 2查看 219关注 0票数 2

如果Ruby方法创建线程,但在方法中连接它们,从函数式编程的角度来看,这仍然被认为是一个副作用吗?我使用的实现是YARV Ruby,其中线程是由操作系统创建的,尽管使用了GVL (全局VM锁)。

创建线程的原因是做system调用,这是一个副作用,但我从来没有遇到过任何人说线程是还是不是副作用。

这个简化的伪代码看起来有点像下面的代码:

代码语言:javascript
复制
  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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-09 07:38:48

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 18:42:23

如果线程除了接收初始参数和返回一些最终结果之外,没有以任何方式通信,或者使用任何其他副作用,那么线程的使用可以被认为是纯粹的。

如果可以用简单地说“运行计算X”的代码替换“产生一个线程来运行计算X,然后得到它的结果”的代码,除了改变运行时的数量之外没有其他效果,那么它就是纯粹的。如果你不能做到这一点,那么线程正在做一些副作用的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12790815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档