Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 不叫线程加入可以吗?_Ruby_Multithreading - Fatal编程技术网

Ruby 不叫线程加入可以吗?

Ruby 不叫线程加入可以吗?,ruby,multithreading,Ruby,Multithreading,不调用线程#join可以吗?在这种情况下,我不在乎线程是否崩溃——我只希望Unicorn继续处理 class MyMiddleware def initialize(app) @app = app end def call(env) t = Thread.new { sleep 1 } t.join # is it ok if I skip this? @app.call env end end 我会得到“僵尸线程”或类似的东西吗?不调用joi

不调用
线程#join
可以吗?在这种情况下,我不在乎线程是否崩溃——我只希望Unicorn继续处理

class MyMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    t = Thread.new { sleep 1 }
    t.join # is it ok if I skip this?
    @app.call env
  end
end

我会得到“僵尸线程”或类似的东西吗?

不调用
join
很好-事实上,多线程代码通常根本不需要
join
。只有在新线程完成之前需要阻塞时,才应调用
join


你不会得到一个“僵尸”线程。新线程将运行到完成,然后为您清理自己。

我同意,join被高估了。当您在早期向人们教授线程时,它很有用,但一旦您了解了线程的实际工作方式,您就会意识到连接实际上限制了您有效地进行多线程处理的能力。我注意到的一种模式是连接通常只在非常短的生命周期线程上使用,比如工作线程。示例:管理器线程生成10个工作线程,然后将它们全部合并,收集其结果并进行处理。@glowcoder确切地说,在这些情况下,通常有比合并更好的选项,具体取决于您使用的平台和库。。。