EventMachine 在单独的线程中执行所有操作,并在一个主线程中执行此操作的所有回调。当您需要降低数据部分之间的数据处理竞争力时,它非常有用。您可以从网络并发接收数据并在队列中处理结果。但我需要走得更远。我的网站上有很多用户,并希望为每个用户创建单独的队列。因此,对于每个用户,它应该表现得像单个 EM。但我不能。EventMachine 是单调的。
Thread.new do
EM.run
end
def request_from_user
operation = Proc.new {
# network request
}
callback = Proc.new {
# some heavy data processing
2*2
}
5.times do
EM.defer(operation, callback)
end
end
3.times do
request_from_user
end
所以我们在主线程队列中有回调混乱。一些数据将在队列末尾处理,一些在中间处理,这很糟糕。负载过重会扩大队列,一些用户会以非常大的延迟收到结果。如果我在单线程中运行 request_from_user,无论如何都会在一个 EM 主线程中执行回调。
那么我能用它做什么呢?是否可以为每个用户创建单独的回调队列并同时执行它?甚至可能没有 EventMachine。赛璐珞,随便...