为什么Ruby没有内置的ThreadPool?

Che*_*eng 7 ruby threadpool

我有一个程序,一次创建10000个线程,并同时运行8个.

但ruby没有内置的Java ThreadPool.有充分的理由吗?

rog*_*ack 20

可能是因为使用标准库"Queue"类很容易自己滚动.

q = Queue.new
3.times { Thread.new {  while something = q.pop(true) rescue nil; ... }
Run Code Online (Sandbox Code Playgroud)

这是一个很好的问题 - 我可能会建议使用Ruby Core.


Rai*_*dog 2

最有可能的原因是 ruby​​ 没有“真正的”线程。它具有所谓的绿色线程。ruby 解释器负责调度执行线程,而不使用任何底层操作系统线程。这有效地使 Ruby 成为单线程。

  • 绿色线程不会使线程池变得无用。一个线程可能正在等待程序外部的某些事情,在此期间可以调度另一个线程。使用绿色线程通常(通常?)比顺序处理更有效。 (3认同)
  • 尽管 YARV (ruby 1.9) 一次只使用一个 CPU,但我不认为它使用绿色线程。 (2认同)