Используем потоки в Ruby
Многие Руби-разработчики игнорируют потоки (threads), хотя это очень полезный инструмент. В данной статье мы рассмотрим создание IO потоков в Руби и покажем как Руби справляется с потоками в которых происходит много вычислительных операций. Попробуем применить альтернативные имплементации Руби, а так же узнаем, каких результатов можно добиться при помощи модуля DRb. В конце статьи посмотрим, как эти принципы используются в различных серверах для аппликаций на Ruby on Rails.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 секунды.Читать дальше →