複数のクライアントからのログインを処理するJavaサーバーがあります。サーバーは、各tcp/ipソケット・リスナーのスレッドを作成します。データベースアクセスは、サーバーが作成する別のスレッドによって処理されます。Javaでの非同期メッセージキューの実装
私がサーバに接続しているクライアントの数はかなり少なく(< 100)、実際のパフォーマンスの心配はありませんが、将来どのようにクライアントを処理するべきかを考えています。私の関心事は、多くのクライアントでは、サーバとデータベースのスレッドが、クライアントスレッドからのメソッドへの定数呼び出しによって邪魔になることです。
具体的には、データベースとの関係:各クライアントスレッドは、そのサーバーの親のパブリックデータベーススレッドにアクセスし、データアクセスメソッドを実行します。私がやるべきことは、何らかのメッセージキューを用意して、クライアントスレッドがそのデータ要求を置くことができ、データベーススレッドがラウンドしたときにそれを行うということです。データアクセス呼び出しから返されるデータがあれば、それをクライアントスレッドがピックアップするためにキューに置くことができます。これはすべてメインサーバーコードや他のクライアントスレッドには当てはまりません。
したがって、私は、クライアントスレッドがメッセージを置くことができる非同期メッセージキューを実装したいと思って、データベーススレッドが拾い上げます。それは正しいアプローチですか?私が実装について読むことができるどんな考えやリンクもありがたいです。
答えがありませんので、コメントしてください...あなたはおそらくGoogleに "Java C10Kの問題"を望むでしょう。基本的に、TCP/IP接続ごとに1つのスレッドは、あなたが疑っているとおりに切断していません。あなたの問題は必ずしもあなたが書いた「定数呼び出し」*ではありませんが、クライアントの数が多くなると(クライアントごとに1つのスレッドを使用し続けると)巨大な数のスレッド間で一定のスワッピングが行われます。 – SyntaxT3rr0r
IOをブロックすることは、最近10Kスレッドまで非常によく実行できます。 espをJava 6と一緒に使用しています。これは以前と同じくらい問題ではありません。 –