在Ruby中主线程退出时终止子线程可以吗?

在Ruby中主线程退出时终止子线程可以吗?,ruby,multithreading,Ruby,Multithreading,给定的文件如下所示: Thread.new { (1..10).each do |e| `curl http://localhost/#{e}` end } sleep 0.03 puts "--- done" 运行此文件时,我发现“子线程”仅发送4-5个HTTP请求时退出 我的问题是:这是因为“ruby intepreter”退出了吗?(那么所有的ruby线程都终止了?) 当“主线程”终止时,如何保持“子线程”运行 如果我在ruby Web服务器(如thin、puma)

给定的文件如下所示:

Thread.new {
  (1..10).each do |e| 
    `curl http://localhost/#{e}`
  end 
}

sleep 0.03
puts "--- done"
运行此文件时,我发现“子线程”仅发送4-5个HTTP请求时退出

我的问题是:这是因为“ruby intepreter”退出了吗?(那么所有的ruby线程都终止了?)

当“主线程”终止时,如何保持“子线程”运行

如果我在ruby Web服务器(如thin、puma)中运行此代码,是否存在此问题


谢谢。

当主线程退出时,进程终止,并停止所有其他正在运行的线程。为了避免这种情况,可以调用等待另一个线程的

thread = Thread.new {
  (1..10).each do |e| 
    `curl http://localhost/#{e}`
  end 
}

thread.join

Web服务器进程很可能不会退出,但它们可能在线程结束获取URL之前完成请求服务。最好使用a来处理这种情况。

在其他语言(如Java/PHP)中,它们的行为像Ruby吗?(主线程退出时子线程终止)是的,我相信这是默认行为:。你需要调用
join
来等待线程。是的,当然!我发现在Java中,“子线程”似乎会在主线程终止时运行。在C/C++中,它与Ruby的作用相同。我不确定。所以当我有时间的时候,我会给足够的测试。非常感谢你!