Ruby Eventmachine:并发
我有一个简单的程序,它接收一个连接,进行一些处理,并在一个标准端口上发送一个响应。由于这是同步完成的,如果一个请求花费的时间太长,则不会处理并发请求 无论发生任何阻塞请求,允许同时处理多个请求的方式是可延迟的吗Ruby Eventmachine:并发,ruby,concurrency,eventmachine,Ruby,Concurrency,Eventmachine,我有一个简单的程序,它接收一个连接,进行一些处理,并在一个标准端口上发送一个响应。由于这是同步完成的,如果一个请求花费的时间太长,则不会处理并发请求 无论发生任何阻塞请求,允许同时处理多个请求的方式是可延迟的吗 谢谢,最简单的方法是拿出一个新线程来处理后台任务,然后在执行任何与EventMachine相关的操作之前切换回主线程。您可以使用defer方法执行此操作: def do_something EventMachine.defer do do_long_process end
谢谢,最简单的方法是拿出一个新线程来处理后台任务,然后在执行任何与EventMachine相关的操作之前切换回主线程。您可以使用
defer
方法执行此操作:
def do_something
EventMachine.defer do
do_long_process
end
end
请记住,程序块接触到的应用程序部分必须是线程安全的,您需要确保返回到主线程,并执行类似于“下一步”的操作,以确保所有EventMachine操作都发生在正确的线程上。最简单的方法是拿出一个新线程来处理您的后台任务,然后在执行任何与EventMachine相关的操作之前切换回主线程。您可以使用
defer
方法执行此操作:
def do_something
EventMachine.defer do
do_long_process
end
end
请记住,被块触及的应用程序部分必须是线程安全的,并且您需要确保返回到主线程,并使用类似于
next\u tick
的内容,以确保所有EventMachine操作都发生在正确的线程上。这取决于您的请求耗时过长的原因,如果它是一些IO绑定的东西,比如DB查询或任何类型的对另一台服务器的请求(HTTP、TCP、SMTP等等),那么EventMachine就是最好的选择
如果不是这样,您能描述一下为什么您的请求花费了太多时间吗?这取决于您的请求花费太长时间的原因,如果它是IO绑定的,如DB查询或任何类型的对另一台服务器的请求(HTTP、TCP、SMTP等),那么EventMachine就是最好的选择 如果不是你的情况,你能描述一下为什么你的请求花费了太多时间吗