2

この質問を検討してください。

現在、スレッドの作成にコストがかかる理由にはさまざまな理由があります。特に、大量のメモリを割り当てる必要があり、スレッドを登録する必要があるためです。

次のコードを検討してください。

Thread thread = new Thread(new SomeRunnable());
thread.start();

それのどの部分が「高価な」部分ですか? Thread オブジェクトを実際に作成する行またはスレッドを開始する行? または両方?私が質問している理由は、私がゲームのサーバー コンポーネントを作成していて、プレイヤーが接続したらすぐに Thread オブジェクトを作成し、プレイヤーがログインを終了したらスレッドを開始するべきか、またはその両方を行うべきかを議論しているためです。プレイヤーがログインを完了した後、スレッドを作成して開始します。

4

3 に答える 3

11

オブジェクトの作成Threadは非常に安価です。コンストラクターを呼び出す代償を払うだけです。スペースを占有するのはstart()メソッドです (ネイティブ呼び出し、スタック メモリなど)。

一方、大量のスレッドを作成する場合は、事前にスレッドを作成 (および開始) し、プールを用意することを検討してください。これはすでに完了していますExecutors。クラスを確認してください。

于 2013-01-28T19:20:49.283 に答える
4

これは、時期尚早の最適化のように思えます。スレッドをインスタンス化することと、スレッドを遅くすることよりも早く開始することに違いがあるとは思えません。100スレッドだったらまた違う感じがするかも。

アプリケーションでパフォーマンスの問題が発生したことがある場合、プロファイラーを使用して実際のパフォーマンス シンクを発見することをお勧めします。

于 2013-01-28T19:19:18.443 に答える
1

スレッド作成のコストを回避したい場合は、スレッド プールを使用します。私は@Grayに同意します。接続プールと同様に、スレッド プールを使用すると、何かを何度も作成する必要がなくなります (また、スレッド数が制御不能に増加するのを防ぎます)。

于 2013-01-28T19:20:41.090 に答える