Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Админка на Ruby on Rails

Новое в Rails 4: безопасное использование многопотового кода по умолчанию

Большое изменение в Rails 4 - то, что приложения теперь ориентированы на многопотоковое исполнение по умолчанию. Это дает огромные выигрыши в производительности приложений, поскольку они будут в состоянии обслуживать больше чем один запрос одновременно.

Ориентированный на многопотоковое исполнение код

Если Вы используете рабочий веб-сервер, который допускает параллелизм, такой как Puma, Вы должны гарантировать, что весь Ваш код ориентирован на многопотоковое исполнение, включая все gem-ы которые использует ваше приложение. Вы должны быть уверены, что каждый gem, включенный в Ваш проект, ориентирован на многопотоковое исполнение.

Как только все gem-ы будут проверены на корректное исполнение многопотокового кода, следующий шаг - изучить Ваш собственный код проекта. Просмотрите свое приложение в поисках совместно используемых частей кода, таких как:

  • переменные класса
  • константы
  • глобальные переменные

Вот пример кода многопотокового исполнения долгого конкурентного вычисления, используя Mutex:  

class SomeClass
  @lock = Mutex.new

  class << self
    def some_calculation
      @lock.synchronize do
        @calc ||= heavy_operation
      end
    end
  end
end

 

Используемый веб-сервер

Если Вы используете веб-сервер, такой как Unicorn, даже если Ваше приложение ориентированно на многопотоковое исполнение, то все запросы будут все еще работать в изоляции. Каждый рабочий процесс выполняет единственный поток за один раз. Однако, поскольку Rails теперь ориентировано на многопотоковое исполнение по умолчанию, у Вас нет необходимости включения в ваш код middleware Rack::Lock в каждом запросе.

Rails будет автоматически включать Rack::Lock, если ваше приложение исполняется на многопотоковом веб-сервере, таком как WEBrick.