[解決済み] スレッドとスレッドプール
質問
新しいスレッドを使用することと、スレッドプールからスレッドを使用することの違いは何ですか? また、なぜ明示的に作成したスレッドではなく、プールからスレッドを使用することを考慮しなければならないのでしょうか。私はここで特に .NET について考えていますが、一般的な例でもかまいません。
どのように解決するのですか?
スレッドプールは、頻繁に行われる比較的短い操作に対して、以下のようなメリットをもたらします。
- 新しいスレッドを作成する代わりに、既に作成されたスレッドを再利用する (高価な処理)
-
新しいワーク アイテムへの要求が殺到した場合にスレッドの作成速度を遅くする (これは .NET 3.5 でのみ行われると思います)
-
100 個のスレッドプール タスクをキューに入れた場合、これらの要求に対応するためにすでに作成されているスレッド数 (たとえば 10 個) だけ使用します。スレッドプールは頻繁にチェックを行い (3.5 SP1 では 500 ミリ秒ごとだと思います)、キューに入ったタスクがある場合は、新しいスレッドを 1 つ作成します。タスクが迅速であれば、新しいスレッドの数は少なく、短いタスクのために 10 ほどのスレッドを再利用するほうが、前もって 100 のスレッドを作成するよりも高速になります。
-
作業負荷が常に大量のスレッドプール要求を持っている場合、スレッドプールは、要求を処理するために利用できるより多くのスレッドが存在するように、上記のプロセスによってプールに多くのスレッドを作成することによって作業負荷に合わせて調整されます。
-
チェック ここで スレッドプールがどのように機能するかについてのより詳細な情報については
-
新しいスレッドを自分で作成することは、ジョブが比較的長く実行される場合により適切でしょう (おそらく 1、2 秒程度ですが、特定の状況に依存します)。
スレッドプール スレッドはバックグラウンド スレッドであり、メイン スレッドが終了したときに停止します。手動で作成されたスレッドは、デフォルトではフォアグラウンド (メイン スレッドが終了した後も実行し続ける) ですが、それらに Start を呼び出す前にバックグラウンドに設定することが可能です。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] Nuget接続の試行に失敗しました。"Unable to load service index for source"。
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] RESTとRESTfulの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] ポストバックまたはコールバックの引数が無効です。 イベント検証は '<pages enableEventValidation="true"/>' を使用して有効になっています。
-
[解決済み] COMExceptionエラー80040154を修復する方法は?
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] リファレンスの追加にSystem.Web.Mvcが表示されないのはなぜですか?
-
[解決済み] 24:00:00 を超える値を持つ .Net Timespan を格納するための正しい SQL タイプは何ですか?
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] CryptographicException「キーセットが存在しない」、ただしWCF経由に限る
-
[解決済み] Math.Round(2.5)はなぜ3でなく2を返すのですか?