在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的作用相同。我不确定。所以当我有时间的时候,我会给足够的测试。非常感谢你!