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) }
Использование процессов кажется простым, но у него есть недостатки. Потребляется много памяти, так как новому процессу требуется собственное выделение памяти, создание и переключение контекста процесса обходится дороже, а коммуникация усложняется.