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 がなくてもかまいません。セルロイド、なんでも...