Processes

Вероятно, самый простой способ запустить параллельные задачи — использовать метод Kernel модуля fork. Он запускает заданный блок в подпроцессе.

def factorial(n)
 n == 0 ? 1 : n * factorial(n - 1)
end

pids = []
4.times do
   pids << fork do
     1000.times { factorial(1000) }
  end
end

# wait for child procceses to exit
pids.each { |pid| Process.wait(pid) }

Использование процессов кажется простым, но у него есть недостатки. Потребляется много памяти, так как новому процессу требуется собственное выделение памяти, создание и переключение контекста процесса обходится дороже, а коммуникация усложняется.