Используем потоки в Ruby
6 мин
Туториал
Многие Руби-разработчики игнорируют потоки (threads), хотя это очень полезный инструмент. В данной статье мы рассмотрим создание IO потоков в Руби и покажем как Руби справляется с потоками в которых происходит много вычислительных операций. Попробуем применить альтернативные имплементации Руби, а так же узнаем, каких результатов можно добиться при помощи модуля DRb. В конце статьи посмотрим, как эти принципы используются в различных серверах для приложений на Ruby on Rails.
Рассмотрим небольшой пример:
Если нам надо обратитьcя к двум серверам, например, чтобы очистить кэш, и мы дважды последовательно вызовем эту функцию:
то наша программа будет работать 6 секунд.
Мы можем ускорить исполнение программы, если будем использовать потоки, например, так:
Мы создали два потока, в каждом потоке обратились к своему серверу и командами #join сказали, что главной программе (главному потоку) надо подождать их завершения. Теперь наша программа успешно выполняется в два раза быстрее, за 3 секунды.
IO потоки в Руби
Рассмотрим небольшой пример:
def call_remote(host)
sleep 3 # симулируем долгий запрос к серверу
endЕсли нам надо обратитьcя к двум серверам, например, чтобы очистить кэш, и мы дважды последовательно вызовем эту функцию:
call_remote 'host1/clear_caches'
call_remote 'host2/clear_caches'то наша программа будет работать 6 секунд.
Мы можем ускорить исполнение программы, если будем использовать потоки, например, так:
threads = []
['host1', 'host2'].each do |host|
threads << Thread.new do
call_remote "#{host}/clear_caches"
end
end
threads.each(&:join)Мы создали два потока, в каждом потоке обратились к своему серверу и командами #join сказали, что главной программе (главному потоку) надо подождать их завершения. Теперь наша программа успешно выполняется в два раза быстрее, за 3 секунды.

Я знаю PHP. Не просто знаю, а действительно знаю. Не только синтаксис, или идиомы и особенности, но еще и почему — почему что-то работает именно так как оно работает, понимаете, под капотом. И скорее всего я тем или иным образом принимал участие в принятии того или иного решения. Все таки, тринадцать лет с языком — это долгий срок. Но я работал не только с PHP.
Мы рады сообщить о том, что новая версия RubyMine, интегрированной среды разработки для Ruby on Rails, 



Не успело Rails сообщество оправиться от последних 

