为什么退出Ruby线程会杀死我的整个程序?

时间:2013-09-04 03:20:09

标签: ruby multithreading

我有这段代码:

puts "Start"
loop do
    Thread.start do
        puts "Hello from thread"
        exit
    end
    text = gets
    puts "#{text}"
end
puts "Done"

我期望看到"开始"接下来是"你好来自线程"然后我可以输入会回复给我的输入。相反,我得到了#34;开始"和#34;你好来自线程"然后程序退出。

来自exit的文档:

  

终止thr并安排另一个要运行的线程。如果这个帖子   已被标记为被杀死,exit返回Thread。如果是这样的话   主线程或最后一个线程退出进程。

但我以为我催生了一个新线程?为什么它会退出我的主要流程?

1 个答案:

答案 0 :(得分:8)

您正在查看Thread#exit文档。 killKernel#exit,它终止了Ruby脚本。

puts "Start"
loop do
    Thread.start do
        puts "Hello from thread"
        Thread.exit
    end
    text = gets
    puts "#{text}"
end
puts "Done"