Ruby的ThreadGroup有什么作用?

11

我正在阅读《Programming Ruby》,想找有关Thread的文档,不过看到了ThreadGroup

文档介绍了它的功能,但没有解释它的用途。

线程组是否与线程池有关呢?我以为Ruby没有线程池


有些犹豫地给出一个真正的答案,但是看了一下Google codesearch上的用法,我认为你说得对,它是所谓的绿色线程池。 - Russ Clarke
@RussC 我认为这只是线程池实现的一部分。您需要将作业数据添加到“队列”中,并使线程弹出队列中的项目。我基于维基百科对线程池模式的定义:http://en.wikipedia.org/wiki/Thread_pool_pattern。此外,从ruby 1.9开始,线程是本地线程而不是绿色线程。 - Kelvin
1个回答

8
新线程是在它们的父线程组中创建的。您可以使用ThreadGroup来组织由父线程生成其他线程所给出的隐式树结构,并使用list实例方法获取所有尚未终止的线程,即定义对组中所有线程操作的方法。
此外,如果运行不受信任的代码并想要监视它生成的线程,可以使用enclose禁止向该组添加(或删除)线程。

2
你能描述一下为什么你想使用它,而不是它是做什么的吗? - Andrew Grimm
1
把它看作是专为线程设计的数组。你可以组织一组并发任务,例如检查此组中的所有任务是否已完成。除了enclose方法外,它只适用于保持线程有序 - Thread类本身不提供有关谁创建了线程的信息。也许我正在进行的实验的一个例子:我有很多代理同时运行,分成团队。我可以使用ThreadGroups按团队组织代理线程,降低团队的优先级,或者检查团队中还有多少代理线程仍然存活。 - dhoelzgen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接