Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程中的Ruby线程_Ruby_Ruby On Rails 4 - Fatal编程技术网

线程中的Ruby线程

线程中的Ruby线程,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我有一个文件是这样的线程: Thread.new do # Do something end.join 我的问题是关于子线程的。我知道上面的线程将与主线程连接,主线程将在终止主线程之前“等待”该线程完成 但是,该生命周期在以下示例中是如何工作的: Thread.new do # Do Something Thread.new do # Do something else end.join end.join 内线程是连接到父线程还是连接到主线程?

我有一个文件是这样的线程:

Thread.new do
   # Do something
end.join
我的问题是关于子线程的。我知道上面的线程将与主线程连接,主线程将在终止主线程之前“等待”该线程完成

但是,该生命周期在以下示例中是如何工作的:

Thread.new do
    # Do Something

    Thread.new do
        # Do something else
    end.join
end.join
内线程是连接到父线程还是连接到主线程?外螺纹是否在内螺纹上“等待”,主螺纹是否在主螺纹上“等待”

再次感谢

我知道上面的线程将与主线程连接,主线程将在终止主线程之前“等待”该线程完成

它之所以这样做,是因为你说了
。加入
。Ruby不等待线程;程序终止时未连接的任何线程都将被终止

内线程是连接到父线程还是连接到主线程

它完全按照命令执行:外部线程说“启动一个线程,然后加入它,然后结束”。主线程将等待所有这些完成,因为它也被告知要加入外部线程

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                  \---/