0

EventMachine は、すべての操作を個別のスレッドで実行し、この操作のすべてのコールバックを 1 つのメインスレッドで実行します。データの部分間のデータ処理における競争力を減らす必要がある場合に非常に役立ちます。ネットワークからデータを同時受信し、結果をキューで処理できます。しかし、私はさらに先に進む必要があります。私のサイトには多くのユーザーがいて、それぞれに個別のキューを作成したいと考えています。したがって、ユーザーごとに単一の 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 をシングル スレッドで実行すると、いずれにせよ 1 つの EM メイン スレッドでコールバックが実行されます。

それで、私はそれで何ができますか?ユーザーごとに個別のコールバック キューを作成し、同時に実行することはできますか? EventMachine がなくてもかまいません。セルロイド、なんでも...

4

2 に答える 2

1

別々のポートでリッスンできる場合は、ユーザーごとに 1 つのサーバー/ポートを持つことができます。そうでない場合、Ruby には Queue オブジェクトがあります。これは役に立つかもしれませんスレッド。

于 2013-03-08T00:50:32.033 に答える
0

コールバックの作業を操作 (つまり、データの処理が完了したときにのみコールバックが起動する) または EM.defer 呼び出しに移動しないのはなぜですか? あらゆる種類のレイテンシが発生するため、メイン スレッドで大量のデータ処理を実行したくありません。

于 2013-10-04T03:15:26.213 に答える