2016-04-30 4 views
-1

nioでは、多くのソケットからデータを取得することができます。をSSLエンジンのダウンストリーム、またはhttpパーサーにフィードする必要があります。私はまた一つのキーのように一つのスレッドに結び付けなければないように(つまり、多くのスレッドが依然としてために、同じキーからのデータを保持する必要があります)一度にそのセッションで1つのことしか実行しないセッションベースのエグゼキュータを書く方法は?

public void execute(Object key, Runnable r); 

のようなインターフェース何かをSessionExecutorの作成について考えてきましたスレッドのプールから削除します。私はkey = 1、runnable = A、B、Cからのものを受け取るので、これらのrunnablesはA、B、Cを実行する必要がありますが、理想的には同じスレッドで実行する必要はありません(つまり、その同じハッシュ/スレッド上の別のキーを枯渇させるために同じスレッドにハッシュします)。ただし、Aランナブルが実行されるまでBランナブルは実行されません。

これは非常に興味深いアルゴリズムの問​​題に終わります。私が1000のソケットで終わると、私は1000のキューを持っているかどうか分からない。キューが1つだけの場合は、着信するすべてのランナブルとそのキーを調べ、そのキーが実行可能でないことを確認し、毎回キューをトラバースする必要があります。

私はそれよりも少し速くしたいと思っていました。

さらに、このようなものは既に存在しますか?私は何も知らなかった。

編集:これについてもっと考えると、ある種の特別な順序でキューに1つのキューとN個のチャネルがある場合、このようなものをサポートできる優れたアルゴリズム/データ構造があるのだろうかと思います。または、これがこれを達成するためのデータ構造の組み合わせである場合。私は今、何らかの種類のミックスが必要だと思っています。

答えて

0

私は何か他のものは、もう少しパフォーマンス....わからないことができれば、私はまだ疑問に思うが、時期尚早の最適化がされてこれを刺しを取り、この

https://github.com/deanhiller/webpieces/blob/master/core-util/src/main/java/org/webpieces/util/threading/SessionExecutorImpl.java

ような何かを思い付きましたすべての悪の根源とそのすべて...私はこれで今のところ行くつもりです。

関連する問題