0

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。赛璐珞,随便...

4

2 回答 2

1

如果您可以监听不同的端口,那么每个用户可以拥有一个服务器/端口。如果不是,Ruby 确实有一个可能对您有用的 Queue 对象:http ://www.ruby-doc.org/stdlib-1.9.3/libdoc/thread/rdoc/Queue.html用于将进程输出到其他线程。

于 2013-03-08T00:50:32.033 回答
0

为什么不将回调中的工作移至操作(因此,回调仅在您完成数据处理时触发)或 EM.defer 调用?您不想在主线程上进行繁重的数据处理,因为这会导致各种延迟。

于 2013-10-04T03:15:26.213 回答