2012-02-01 9 views
1

私はたくさんのオブジェクトを持っています。彼らは並べ替えるか注文する必要はありません。それらには、myObject.update()という呼び出す必要があるメソッドがあります。最終的に彼らは彼のコンテナから取り除く必要があります。データセットをスレッド化していますか?

今はシングルスレッドで、update()メソッドはCPUバインド(I/Oなし)です。我々は、16の "コア"(コア+ HT)を持つ素敵なサーバーを持っています。

私がしたいのは、1つのコンテナオブジェクトがオブジェクトを「ディシング」する役割を果たすことです。そして、新しいオブジェクトが必要なときにコンテナに要求する15のスレッド。これは良い方法ですか?

オブジェクトを保持するスレッドセーフなデータ構造とは何ですか?それとも、コンテナオブジェクトに同じオブジェクトを2回送信しないようにするだけでいいですか?

+1

達成しようとしていることを理解するためには、さらに多くの状況が必要だと思います。オブジェクトは独自の更新メソッドまたは他のメソッドによって削除されていますか?一束は何ですか?すべてを一度だけ更新するのか、ある種の「ゲームループ」で更新しますか? –

+0

[ConcurrentLinkedQueue](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html)? –

答えて

1

Javaでは、問題の候補はLinkedBlockingQueueArrayBlockingQueueです。

これらは、先入れ先出し機能を提供します。オプション機能は、一度に保持する要素の数に制限されます。

また、オンデマンドでスレッドを処理するためのスレッドプールと内部キューを保持するExecutorServiceを使用することをお勧めします。

+0

+1 MyObjectでRunnableを実装して、プール内に16個のスレッドを持つExecutorServiceを設定してください(最高のパフォーマンスを得るには何かを試してみる必要があります)。MyObjectの* BlockingQueueをフィードしてください。 –

関連する問題