-1

私は、開発中のサーバー用に Java NIO または古い Java I/O ブロッキング ソケットのどちらを選択するか、しばらくの間苦労してきました。

私は、Java NIOの方が優れていると考えていました。これは、非常に多数のクライアントがあり、クライアントが接続されたままになるため、サーバーが利用可能になったときにデータをプッシュできるからです。

したがって、スレッドの数が多くなるため、java のブロック i/o はやり過ぎになると思います。

この場合、あなたの意見はどうですか?

4

1 に答える 1

1

1 つのメッセージをクライアントにプッシュするのに時間がかかることが予想される場合にのみ、I/O のブロックで問題が発生します。クライアントを接続するだけでは、クライアントごとに 1 つのスレッドは必要ありません。実際、私は今、そのようなソフトウェアを書いています。特定の時点で進行中の同時メッセージ プッシュと同数のスレッドのみが必要です。通常、これは高くなりません。メッセージをプッシュするのに必要な時間と、メッセージが到着するまでの待機時間の比率を考慮してください。同時クライアントの数にこの数を掛けると、アクティブなスレッドの平均数が得られます。

クライアントごとに 1 つずつ、開いているすべての出力ストリームのセットを維持します。クライアントにプッシュする必要があるメッセージが到着するまで、それらはメモリ内に留まります。その時点で、その 1 つのメッセージを処理するために 1 つのスレッドが必要になります。メッセージのプッシュ中に別のイベントを処理して別のクライアントにメッセージをプッシュする場合は、2 番目のスレッドが必要になりますが、最初のプッシュが完了するとすぐに、そのスレッドは使用可能なプールに返されます。スレッド。

また、アクター モデルの実装に、メッセージのプッシュを調整するようアドバイスすることもできます。アクター モデルは、この問題に完全に一致します。

于 2012-10-20T18:45:43.563 に答える