2017-01-24 6 views
0

Я только что видел единорог конфигурацию сервера, как это, в моем новом проекте кодовый:Unicorn рабочего сервера конфигурация

worker_processes ENV['UNICORN_WORKERS'].to_i || 2 
preload_app true 
timeout 30 

after_fork do |server, worker| 
    Thread.new do 
    begin 
     RABBIT_CONNECTION = Bunny.new(ENV['AMQP_URL']) 
     RABBIT_CONNECTION.start 
    rescue Bunny::TCPConnectionFailed => e 
     puts "Connection failed" 
    end 
    begin 
     OUTGOING_CHANNEL = RABBIT_CONNECTION.create_channel 
    rescue Bunny::PreconditionFailed => e 
     puts "Channel-level exception! Code: #{e.channel_close.reply_code}, 
     message: #{e.channel_close.reply_text}".squish 
    ensure 
     RABBIT_CONNECTION.close 
    end 
    end 
end 

Из того, что я знаю о единороге, что это однопоточный, многозадачность веб сервер.

Что это такое Thread.do блок делать? Что произойдет, если бы весь этот другой код был там без окружения в блоке Thread.do?

+0

Помимо вашего вопроса, на который был удовлетворен Vishnu, вы уверены, что это именно тот код, который вы нашли? Поскольку он сразу же закрывает соединение после создания канала ... – kaikuchn

ответ

3

Да, единорог - однопоточный, многопроцессорный веб-сервер. Здесь Thread.do используется для асинхронного подключения к RabbitMQ с помощью клиента Bunny. То есть, единорог не ждет соединения RabbitMQ после создания процесса. Нить будет ждать того же.

В Единороге (или рубине MRI, если на то пошло) только один поток может использовать CPU за раз. Это достигается с помощью того, что называется GIL или Global Interpreter Lock.

Прочитайте это: http://www.jstorimer.com/blogs/workingwithcode/8085491-nobody-understands-the-gil

И это: https://en.wikipedia.org/wiki/Global_interpreter_lock

Однако для IO опса как ожидания подключения к серверу RabbitMQ, этот поток не будет использовать циклы процессора и другие потоки могут работать на CPU.

Если Thread.do не существует, а сервер RabbitMQ недоступен, процесс ожидает, что сервер будет доступен или время соединения будет отсутствовать.

 Смежные вопросы

  • Нет связанных вопросов^_^