Eventmachine: Concurrency - PullRequest
       9

Eventmachine: Concurrency

2 голосов
/ 29 июля 2011

У меня есть простая программа, которая получает соединение, выполняет некоторую обработку и отправляет ответ обратно на стандартный порт.Поскольку это выполняется синхронно, если один запрос занимает слишком много времени, параллельный запрос не обрабатывается.

Является ли Deferrable способ, позволяющий обрабатывать несколько запросов одновременно, независимо от того, выполняется ли какой-либо запрос блокировки?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Это зависит от того, почему ваш запрос занимает много времени, если это что-то, связанное с вводом-выводом, например, запрос к БД или какой-либо запрос к другому серверу (HTTP, TCP, SMTP, ...), тогда EventMachine - это путь.

Если это не ваш случай, можете ли вы описать, почему ваши запросы занимают слишком много времени?

0 голосов
/ 29 июля 2011

Самый простой способ - создать новый поток для обработки фоновой задачи, а затем переключиться обратно в основной поток, прежде чем делать что-либо, связанное с EventMachine.Вы можете сделать это с помощью метода defer:

def do_something
  EventMachine.defer do
    do_long_process
  end
end

Имейте в виду, что части приложения, к которым обращается ваш блок, должны быть поточно-ориентированными, и вам необходимо обязательно вернуться косновной поток с чем-то вроде next_tick, чтобы гарантировать, что все операции EventMachine выполняются в правильном потоке.

...