我有一个像这样线程化的文件:
Thread.new do
# Do something
end.join
我的问题是关于子线程的。我知道上述线程将与主线程连接,并且主线程将在终止主线程之前“等待”该线程完成。
但是,此生命周期如何在以下示例中起作用:
Thread.new do
# Do Something
Thread.new do
# Do something else
end.join
end.join
内部线程是连接到父线程还是连接到主线程?外螺纹在内螺纹上“等待”,主线程在主线程上“等待”吗?
再次感谢!
答案 0 :(得分:1)
我知道上述线程将与主线程连接,并且主线程将在终止主线程之前“等待”该线程完成。
之所以这样做,是因为您说了.join
。 Ruby不等待线程。程序终止时未加入的所有线程都会被杀死。
内部线程是连接到父线程还是连接到主线程?
它确实执行了所要执行的操作:外部线程说“启动一个线程,然后加入它,然后结束”。主线程将等待所有操作完成,因为它也被告知.join
外线程。
main -launch-----------------------join
outer \---launch-----join---/
inner \---/
这是一个相反的例子-再次,只是因为我明确告诉它这样做:
inner = nil
outer = Thread.new do
inner = Thread.new do
sleep(3)
p "Inner done"
end
sleep(2)
p "Outer done"
end
sleep(1)
inner.join
p "Inner joined"
outer.join
p "Outer joined"
main -launch----------------join---join
outer \---launch-----/------/
inner \---/