ruby - 线程中的 Ruby 线程
问题描述
我有一个像这样线程的文件:
Thread.new do
# Do something
end.join
我的问题是关于子线程。我知道上面的线程将与主线程连接,并且主线程将在终止主线程之前“等待”该线程完成。
然而,这个生命周期在这个例子中是如何工作的:
Thread.new do
# Do Something
Thread.new do
# Do something else
end.join
end.join
内线程是加入父线程还是加入主线程?外线程是否在内线程上“等待”而主线程在主线程上“等待”?
再次感谢!
解决方案
我知道上面的线程将与主线程连接,并且主线程将在终止主线程之前“等待”该线程完成。
它只是因为你说.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 \---/
推荐阅读
- python - 如何在 Excel 中使用“FindNext”?
- c# - 从周期性异步请求中创建 observable
- ansible - Ansible json_query 过滤字典列表中的数据
- r - 将图例添加到 ggarrange 情节
- c# - 运行 azure 函数时,Azure 应用程序配置未更新
- amazon-web-services - 在 AWS IoT Core 规则操作或 AWS Timestream 数据库表中,我们如何指定/配置措施?
- python - 如何预热 Numba 的 JIT?
- python - 如何在序列化程序/视图 Django REST 框架中合并多个模型?
- powershell - 我应该如何在控制台中为每个排序步骤输出排序结果,并且可以通过 Verbose 参数控制
- django - 多个表中的 Django 查询集