我应该使用Ruby线程还是完全不使用Ruby进行线程处理?

8

我有一个选择,要开发一个应用程序,它将严重依赖线程(高达200个)。我知道我可以使用其他支持线程的Ruby解释器,如JRuby。但有两件事:

1)JRuby尚未支持1.9,所以不行。是否有其他非绿色线程解释器至少支持1.9,因为如果我使用Ruby,则这是先决条件。

2)即使使用像JRuby这样的解释器,我真的能获得类似于Java中的良好线程性能吗?也许我应该只使用Java来开发这个应用程序。

注意:这不是主观讨论的尝试。它只涉及线程性能方面的建议。此外,这也不是Java vs Ruby或任何类似的比较。我对Ruby还很新,希望为自己澄清这一点,谢谢。


我认为JRuby线程直接映射到JVM线程。如果是这样的话,即使您的JRuby不是“1.9”,它也应该使用本地线程(如果您的JVM使用本地线程)。哦,你能告诉我们你的应用程序在做什么吗?有时候会有一些你可能没有考虑过的线程替代方案。 - Wayne Conrad
网络I/O/Http。类似于JMeter。每个线程都是为此目的创建的。性能非常重要。因此,如果可以的话,我喜欢用Ruby编程,我希望在这个项目中也能使用它。 - Zombies
小问题:200个线程?那你有一台200核心的机器?很酷。 - Daniel Earwicker
Earwicker,我不是有意冒犯,但你确实需要阅读一下这个:http://en.wikipedia.org/wiki/Thread_%28computer_science%29#I.2FO_and_scheduling... I/O线程被阻塞,因此在该状态下不会消耗任何核心。由于网络是IO密集型的,所以会发生大量阻塞,允许200个线程在单个核心上非常普遍,因为与线程实际在CPU上活动时相比,I/O块需要花费更多的时间。 - Zombies
2
是的,我知道。你需要了解线程池并弄清楚可扩展系统为什么使用它们而不是创建大量没有任务的线程。当线程在IO上被阻塞时,除了占用约1MB的地址空间来存储其堆栈之外,它什么也不做。 - Daniel Earwicker
显示剩余3条评论
1个回答

6

你真的应该进行基准测试。

你的线程将会进行大量的并行计算吗?那么你可能需要本地线程。但是如果你一直在等待IO,那么Ruby的绿色线程可能就足够了。

即使有了这个建议,你还是应该编写一个小型测试程序,看看直接使用Ruby 1.9是否可行。


如果我有时间的话,我会尝试回复并发布结果。 - Zombies

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