この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 26065|答える: 2

[出典] .net/C#スレッドプールの利用に関する簡単な分析 ThreadPool

[リンクをコピー]
掲載地 2017/06/21 9:43:20 | | | |
スレッドプールとは何ですか? なぜスレッドプールを使うのか? スレッドプールの使い方は?

1. スレッドプールとは何ですか?

        .NET FrameworkのThreadPoolクラスは、タスクの実行、作業項目の送信、非同期I/Oの処理、他のスレッドの代行、タイマーの処理に使えるスレッドプールを提供します。 では、スレッドプールとは何でしょうか? スレッドプールは実際にはスレッドオブジェクトを格納する「プール」であり、プール内のスレッドの最小・最大数の設定、実行するメソッドのキューイングなど基本的なメソッドを提供します。 ThreadPoolは静的クラスなので、オブジェクトを作らずに直接使用できます。

2. なぜスレッドプールを使うのか? どんなメリットがあるのでしょうか?

        Microsoftの公式ウェブサイトには次のように記載されています:多くのアプリケーションは、イベントが起こるのを待ちながらスリープ状態のスレッドを大量に作成しています。 また、定期的に起きて状態情報の変更や更新情報を確認するために休止状態に入ったスレッドも多く存在します。 スレッドプールは、システムが管理するワーカースレッドのプールを通じてスレッドをより効率的に利用できるようにします。

        簡単に言えば、新しいスレッドはメモリスペースやその他のリソースを占有する必要があり、新しいスレッドが多いため、多くは休眠状態かリソースの解放を待っています。 データの更新など、定期的に小さな作業しか行わないスレッドが多く、それらは無駄すぎて描画できません。また、実際のプログラミング中に大量のスレッドが突然発生し、短時間で終了することは稀です。 そこでスレッドプールの概念が提案されました。 アプリケーションがスレッドプールに再度リクエストを送ると、保留中のスレッドが活性化され、新しいスレッドを作成せずにタスクを実行するため、多くのオーバーヘッドを節約できます。 システムはスレッド数が最大に達した場合にのみ自動的にスレッドを破棄します。 したがって、スレッドプールを使うことで大きな作成・破壊コストを避け、パフォーマンスと安定性が向上し、さらに開発者はスレッドをシステム管理に引き継ぐことで他の作業に集中できます。


3. スレッドプールの使い方は?

実際、スレッドプールは非常に使いやすいです。以下のように

a. 最大および最小スレッドプールを設定する:

ThreadPool.SetMaxThreads (int workerThreads, int completionPortThreads)
同時にアクティブなスレッドプールのリクエスト数を設定します。 この数を超えるすべてのリクエストは、スレッドプールのスレッドが利用可能になるまでキューに留まります。 スレッドの最小数を設定することもできます。

b. スレッドプールにタスクを追加する:

ThreadPool.QueueUserWorkItem(new WaitCallback(メソッド名));

又は
ThreadPool.QueueUserWorkItem(new WaitCallback(メソッド名)、パラメータ);

例えば、スレッドプール内の最大5スレッドがメソッドを60回実行した場合、5年間の総給与は以下の通りです。



スレッドプーリングを使わない場合、Run()メソッドを非同期で実行するために60スレッドを開かなければならない可能性があり、リソースの無駄です。 現在は最大5スレッドを使い、1秒で実行可能で、効率とパフォーマンスは非常に良好です。





先の:百度マップ フルスクリーンコード(div フルスクリーンコード)
次に:アリババクラウドの違法URLアクセスブロック処理通知
 地主| 掲載地 2017/06/21 9:47:12 |

スレッドプールには以下のような利点があります:

1. マルチスレッドでは、スレッドプールは作成するスレッド数を減らし、スレッドプール内のスレッドを再利用する合理的な方法を用いることができます。 スレッドプールにスレッドがあるスレッドは割り当て待ちの状態にあるからです。

2. 短いライフスパンのスレッドを管理・維持する必要がなく、スレッドが作成されたときにリソースを割り当て、タスク完了後にリソースを解放する必要もありません。

3. スレッドプールは現在のシステム特性に応じてプール内のスレッドを最適化します。

スレッドプールの欠点:

タスクをスレッドプールに引き渡して完了させると、スレッドの優先順位を制御したり、スレッド名やその他の情報を設定したりすることはできません。 [でもスレッドプールに入れる前に、これを洗練させる層を追加できます]

掲載地 2017/12/06 11:28:49 |
まずはマークしておき、後で学べるようにしましょう
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com