1

カスタム クラスのオブジェクト インスタンスがあり、各インスタンスは (メソッドを介して) メッセージを処理し、インスタンスごとに個別に処理されます。他のインスタンスと「会話」するインスタンスはありません。

私の質問は、各オブジェクトが独立してリアルタイムメッセージ (ログなど) を処理するため、各オブジェクトを独自のスレッドに配置する必要があるかどうかです。

返信ありがとうございます。

4

2 に答える 2

1

私の質問は、各オブジェクトが独立してリアルタイムメッセージ (ログなど) を処理するため、各オブジェクトを独自のスレッドに配置する必要があるかどうかです。

各オブジェクトが取得した各メッセージを、新しい別のスレッドで処理する必要があります。これにより、オブジェクトの着信メッセージが高速に処理されます。以来、各オブジェクト間の相互作用がないため、アプリケーションに適したスレッド同期は必要ありません。または、スレッドのプールを使用することをお勧めします。見てThreadPoolExecutor

于 2013-07-03T18:22:20.180 に答える
0

各オブジェクトが独自のスレッドを持つ必要はありませんが、複数のメッセージ処理スレッドを持つことでパフォーマンスが向上する場合があります。スレッドの理想的な数は、処理オブジェクトの数と必ずしも同じであるとは限りません (または同じになる可能性さえあります)。

通常、アプローチを説明するような状況では、タスク/メッセージ処理キューを使用して、各オブジェクトがタスクをキューに追加し、複数のスレッドがキューからアイテムを順番に処理します。ここで使用されるスレッドの数は構成可能であるため、実行中のプラットフォームに合わせてアプリケーションを最適化できます。

この設計を実現する簡単な方法は、単純に をExecutorServiceタスク キューとして使用することです (この場合、メッセージ自体に を実装する必要がありますRunnable)。

// For 2 threads, adjust as appropriate.
ExecutorService executor = Executors.newCachedThreadPool(2);

Runnable次に、メッセージを追加します。

// Add a message to the queue for concurrent / asynchronous processing
executor.submit(message);

executor各オブジェクトが同じキューにメッセージを追加するように、それ自体をすべてのメッセージ処理オブジェクトで共有する必要があることに注意してください (多くのメッセージ処理オブジェクトがあると仮定します)。メッセージ処理オブジェクトごとにキューを作成することもできますが、その決定は、処理オブジェクトの数と、メッセージの処理方法に関する要件によって異なります。

于 2013-07-03T18:34:38.623 に答える