Вы можете запустить каждый цикл обработки субхеша в отдельном потоке, но может ли это привести к повышению производительности, может зависеть либо от (1) используемого вами интерпретатора Ruby, либо (2) от того, связан ли самый внутренний блок с IO, либо вычислить переплет.
Причина # 1 в том, что некоторые интерпретаторы Ruby (такие как CRuby / MRI 1.8) используют зеленые потоки , которые обычно не получают никакой выгоды от какой-либо реальной параллельной обработки, даже на многоядерных машинах. Тем не менее, YARV и JRuby оба используют собственные потоки ОС (JRuby даже для 1.8, поскольку JVM использует собственные потоки), поэтому, если вы можете специально нацелить эти интерпретаторы, вы можете увидеть улучшение.
Причина №2 заключается в том, что если внутренний блок связан с вводом-выводом, то даже интерпретатор на основе зеленых потоков может повысить производительность, поскольку большинство ОС хорошо справляются с планированием потоков вокруг блокировки вызовов ввода-вывода. Если блок строго привязан к вычислениям, то только интерпретатор на основе собственных потоков, вероятно, покажет повышение производительности при использовании нескольких потоков.