Почему в Ruby нет встроенного ThreadPool?

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

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

 JohnMerlino23 июл. 2014 г., 00:07
Да, я думал о чем-то похожем на Java ExecutorService.

Ответы на вопрос(3)

потому что это легко сделать самостоятельно, используя стандартную библиотеку класса «Очередь».

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

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

 rogerdpack03 мая 2012 г., 19:21
Я даже не помню, спросил ли я сейчас ...
 Andrew Grimm02 мая 2012 г., 23:42
Вы получили какой-нибудь ответ?

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

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

 Andy Triggs02 мая 2012 г., 18:56
Конечно, не бессмысленно, если у вас есть блокировка ввода-вывода?
 Joshua02 окт. 2010 г., 03:13
Именно так. Пул потоков, зеленые нити, бессмысленно.
 rogerdpack17 сент. 2012 г., 21:24
Джруби мог бы использовать их, хотя ...
 Andrew Grimm02 мая 2012 г., 23:42
@ Хорошая мысль.
Решение Вопроса

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

 Andrew Grimm05 дек. 2010 г., 12:01
Хотя YARV (ruby 1.9) использует только один процессор за раз, я не думаю, что он использует зеленые потоки.
 Kelvin01 июн. 2012 г., 23:31
Зеленые нити не делают пулы потоков бесполезными. Один поток может ожидать что-то внешнее по отношению к программе, во время которого может быть запланирован другой поток. Использование зеленых потоков часто (обычно?) Более эффективно, чем последовательная обработка.

Ваш ответ на вопрос