2012-04-15 15 views
2

私はJavaを使用してサーバーサイドアプリケーションを作成しています。Java:このシナリオでマルチスレッドを使用すべきですか?

サーバーには、システムの多数のユーザーが保持されています。ユーザーごとに、そのディスクスペースをリモートネットワークストレージと同期させたい。同期は独立しているので、同時に同期をとることを考えています。

私は各ユーザーごとに1つのスレッドを作成し、同期タスクを同時に起動させることを考えています。

しかし、システムには何万人ものユーザーがいる可能性があります。これは一度に数万スレッドを作成し、同時に発砲することを意味します。これがJVMが処理できるものかどうかはわかりません。

これを処理することができたとしても、各スレッドには独自のスタックがあり、大きなメモリヒットになる可能性があるため、メモリが効率的になります。

あなたの意見をお知らせください。

多くのありがとうございます。

+1

barjuとsamlewisの両方が優れています。ノンブロッキングIOを使用する場合は、すべての接続にスレッドを必要とせず、必要なスレッドをスレッドプールで管理する必要があります。 –

答えて

4

あなたはあなたのタスクを実行するためのスレッドのプールを与える固定サイズのスレッドプールで見ることができます。これにより、マルチスレッディングの利点が分かります。

チェックアウトExecutors.newFixedThreadPool()

0

個人的には、1台のマシンに何万人ものユーザーがいません。この多くのユーザーをアクティブにすると、ユーザーごとに多くのことができなくなります。あなたは複数のマシンを買う余裕があります。

これはJavaで多くのスレッドを持つことができますが、これは効率的ではありません。 NIOライブラリを使用すると、スレッドごとに複数の接続を管理できます。

http://www.jboss.org/netty

http://mina.apache.org/よう

ライブラリが適しています。

また興味深いhttp://code.google.com/p/nfs-rpc/

関連する問題