Почему в Ruby нет встроенного ThreadPool? - PullRequest
7 голосов
/ 01 октября 2010

У меня есть программа, которая создает 10000 потоков одновременно и запускает одновременно 8.

Но в ruby ​​нет встроенного ThreadPool, как в Java.Есть ли веская причина?

Ответы [ 3 ]

20 голосов
/ 01 октября 2010

вероятно, потому что вы легко можете создать свой собственный, используя стандартную библиотеку класса "Queue".

q = Queue.new
3.times { Thread.new {  while something = q.pop(true) rescue nil; ... }

Хотя это хороший вопрос - я мог бы предложить добавить его в Ruby Core.

3 голосов
/ 02 октября 2010

Мое подозрение может быть связано с тем, что ThreadPool не будет таким полезным в реализациях Ruby на основе C. Вы можете использовать только один процессор одновременно с Matz's Ruby Intepreter или Yet Another Ruby VM.

Если вы хотите, чтобы несколько потоков выполнялись на нескольких процессорах, вам нужно использовать JRuby.

2 голосов
/ 04 декабря 2010

Скорее всего, причина в том, что у ruby ​​нет "настоящих" потоков.У этого есть то, что называют Зелеными нитями.Интерпретатор ruby ​​заботится о планировании потоков выполнения без использования каких-либо базовых потоков ОС.Это эффективно делает Ruby однопоточным.

...