Ruby 1.9 线程池

标签 ruby multithreading threadpool

据我所知,Ruby 1.9 使用 OS 线程,但实际上只有一个线程仍会并发运行(尽管一个线程可能正在执行阻塞 IO 而另一个线程正在执行处理)。我见过的线程示例只是使用 Thread.new 来启动一个新线程。由于具有 Java 背景,我通常使用线程池来避免启动许多新线程,因为它们是“重量级的”。

Ruby 中是否内置了线程池结构?我没有在默认语言库中看到一个。或者是否有通常使用的标准 gem ?由于操作系统级线程是 ruby​​ 的一个较新的特性,我不知道这些库对它有多成熟。

最佳答案

您是正确的,因为默认的 C Ruby 解释器一次只执行一个线程(其他基于 C 的动态语言,如 Python 也有类似的限制)。由于这个限制,线程在 Ruby 中并不常见,因此没有默认的线程池库。如果有任务要并行完成,人们通常会使用流程,因为流程可以扩展到多个服务器。

如果您确实需要使用线程,我建议您使用 https://github.com/meh/ruby-threadpool在 JRuby 平台上,它是运行在 JVM 上的 Ruby 解释器。这应该是您的拿手好戏,因为它在虚拟机上运行,​​所以它具有真正的线程。

关于Ruby 1.9 线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385287/

相关文章:

java - 始终保持固定的线程数

java - 可调用和异常处理

ruby-on-rails - RSpec 应用程序助手测试 : Undefined local variable or method `helper`

mysql - 重构一个简单的脚本来清理 ruby​​ 中的 mysql 数据库

c++ - 销毁对象时运行方法

c# - IOCP 是在 I/O 发生时或之后运行的线程吗?

ruby-on-rails - 如何使用 Opal 生成示例 Rails 应用程序?

mysql - 如何将Rails服务器设置为apache?

c++ - 无锁 C++ 数据结构,不可能吗?

asp.net - ASP.NET如何确定是否将请求排队?