线程内Ruby线程

问题描述 投票:0回答:1

我有一个线程像这样一个文件:

Thread.new do
   # Do something
end.join

我的问题是关于子线程。我知道上面的线程将与主线程和主线程将“等待”这个主题来完成它终止主线程才能加入。

然而,如何在做这样的事情例如这个生命周期的工作:

Thread.new do
    # Do Something

    Thread.new do
        # Do something else
    end.join
end.join

请问内螺纹连接到父线程或者它加入到主线程?请问外螺纹的内螺纹和主线程的主线程“等待”的“等待”?

再次感谢!

ruby ruby-on-rails-4
1个回答
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                  \---/
© www.soinside.com 2019 - 2024. All rights reserved.