【问题标题】:How many Ruby threads is too many?多少个 Ruby 线程太多了?
【发布时间】:2010-12-26 11:51:32
【问题描述】:

我正在编写一个 Merb 应用程序,它使用 SimpleDB 和 Tokyo Tyrant 的组合进行存储。对于这两个数据存储,我通过为 list 中的每个值启动一个线程然后合并结果集来实现 IN (list) 类型功能。请记住,这是一个 Web 应用程序,我应该创建的线程数量是否有限制? Ruby 1.8.7,所以它们不是内核线程。

【问题讨论】:

  • 抱歉,澄清一下,这些线程只是对 SimpleDB 或 Tokyo Tyrant 服务器进行服务调用,而不是自己做很多处理。我的印象是 MRI 线程可以解决这个问题?

标签: ruby multithreading merb


【解决方案1】:

线程对于您在这里尝试做的事情似乎是一种不好的方法,如果您不能使用 JRuby,我会完全放弃线程。但是,您可以创建一个加载数据库的 ruby​​ 文件,并使用benchmark library 对哪个数字最快进行一些基准测试。您可能还想查看使用的内存。

【讨论】:

  • 那个基准库看起来很有用,我以前不知道:谢谢。
【解决方案2】:

对我来说,您的问题听起来是 IO 限制的,因此单核多线程可能会有所帮助。

在您的主 Ruby 循环中,大多数时候您可能会等待在单独的多线程进程中运行的 tokyo tyrant 和 simple DB。

那么有多少线程?谁知道?您将不得不进行基准测试和衡量

【讨论】:

    【解决方案3】:

    如果您使用 MRI,那么在这种情况下使用线程不会有太大帮助,因为 MRI 使用绿色线程,在计算操作方面没有帮助。我相信使用 JRuby(本机线程)会有所帮助。 我一直听说对于本机线程,最好使用 (核心数 + 1) 来利用可用核心。

    【讨论】:

    • MRI Ruby 1.8 使用绿色线程,但 1.9 不使用绿色线程 - 它仅使用 GIL。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2010-12-01
    • 2011-02-09
    相关资源
    最近更新 更多