2

だから私は小さなアプリケーションでマルチスレッドを使ってきました。ここに新しいスレッドを作成し、そこに新しいスレッドを作成します。

私は現在、IRCチャットを監視するプログラムに取り組んでいます。有効なコマンドごとに、スレッドを作成し、いくつかの作業を行い、結果をチャットに出力します。アプリケーションが短時間で10個以上の有効なコマンドを取得し、10個以上のスレッドが作成される場合があります。アプリケーションの速度が大幅に低下し始めます。スレッドの作成と終了はリソースに対して非常にコスト効率が悪いことを読んだので、メソッドを変更したいと思います。

私が持っていたアイデアは、FIFOベースでそれらをキューに入れるコマンドを渡すメソッドで常に実行されているいくつかのスレッド(5かそこら?)を作成することです。これを実装する前に、もっと良いものがあるかどうかを確認したいと思いました。もちろん、逃げ出して車輪の再発明をしたくはありません。

4

1 に答える 1

6

固定サイズのExecutorServiceスレッド ポーリングを使用できます。送信する各メッセージをタスクとして送信すると、空きスレッドがあるため送信されます。例えば

ExecutorService es = Executors.newFixedThreadPool(5);

注: これにより、メッセージが順不同で送信される可能性があるため、クライアントはタイムスタンプに基づいてメッセージを並べ替えることができます。


ところで: 一度に 10 個のコマンドが著しく遅い場合、これを引き起こすのはスレッドの作成ではありません。スレッドは確かに高価ですが、それほど高価ではありません。代わりに、ネットワークの遅延やその他のブロック操作が発生する可能性があります。ネットワーク接続が不十分な場合は、クライアントごとに qa キューを作成する必要がある場合があります。

于 2013-01-02T16:01:52.917 に答える