Сначала я отвечу на ваш вопрос:
thread_1 = Thread.new do
#do something here
end
thread_2 = Thread.new do
#do something here
end
thread_1.join
thread_2.join(timeout_in_seconds)
Thread#join
заставляет главный поток ждать, пока не завершится присоединенный поток. Если вы укажете тайм-аут в секундах, Ruby закроет поток после того, как истечет этот тайм-аут.
Теперь, по правде говоря, в Ruby 1.8 нет реального параллелизма с интерпретатором Matz Ruby Interpreter (MRI) и нет реального параллелизма только с одним процессором. Согласно этой странице :
Однако, как часть этой среды выполнения, интерпретатор также создает экземпляр Global Interpreter Lock (или более нежно известного как GIL), который является причиной нашего отсутствия параллелизма
Прочтите саму статью для получения дополнительной информации.
МРТ пытается обмануть вас, используя то, что называется Зеленые потоки , что означает, что интерпретатор Ruby позаботится обо всем, что связано с потоками, а не с ОС, другими видами потоков, которые действительно параллельны называются собственными потоками, и Ruby 1.9 поддерживает их через YARV, но это не означает, что каждый поток Ruby работает параллельно, потому что YARV имеет глобальную блокировку виртуальной машины (глобальную блокировку интерпретатора или GIL), поэтому параллелизм - это миф в ruby, и он долгое время.