据我所知,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/