ホームページ  >  記事  >  バックエンド開発  >  C#のマルチスレッド機構に関する予備検討(1)

C#のマルチスレッド機構に関する予備検討(1)

黄舟
黄舟オリジナル
2016-12-21 14:58:261041ブラウズ

1. マルチスレッドの概念

Windows はマルチタスク システムです。Windows 2000 以降を使用している場合は、タスク マネージャーを通じてシステム上で現在実行されているプログラムとプロセスを表示できます。プロセスとは何ですか?プログラムが実行を開始すると、それはプロセスになります。プロセスとは、実行中のプログラムと、プログラムによって使用されるメモリおよびシステム リソースを指します。プロセスは複数のスレッドで構成されます。スレッドはプログラム内の実行フローです。各スレッドには独自のプライベート レジスタ (スタック ポインタ、プログラム カウンタなど) がありますが、コード領域は共有されます。つまり、異なるスレッドが実行できます。同じ機能です。マルチスレッドとは、プログラムに複数の実行ストリームが含まれていることを意味します。つまり、1 つのプログラム内で複数の異なるスレッドを同時に実行して、異なるタスクを実行できます。これは、1 つのプログラムで複数の並列実行スレッドを作成して、それぞれのタスクを完了できることを意味します。マルチスレッドの良い例はブラウザです。ブラウザでは、Java アプレットや画像のダウンロード中にページをスクロールしたり、新しいページにアクセスしたときにアニメーションやサウンドを再生したり、ファイルを印刷したりできます。

マルチスレッドの利点は、CPU 使用率を向上できることです。マルチスレッド プログラムでは、1 つのスレッドが待機する必要があるときに CPU が実行できるため、プログラムが常に何もしないことを望むプログラマーはいません。これにより、プログラムの効率が大幅に向上します。

ただし、スレッドを正しく使用するには、システムのパフォーマンスに影響を与える可能性があるスレッド自体の不利な側面も認識する必要があります。

スレッドもプログラムであるため、スレッドが多くなるほど、より多くのメモリを占有する必要があります。占有
複数のスレッドを調整して管理する必要があるため、スレッドを追跡するために CPU 時間が必要です
スレッド間の共有リソースへのアクセスは相互に影響し、共有リソースの競合の問題を解決する必要があります
スレッドが多すぎると、制御が複雑すぎると、最終的に多くのバグが発生する可能性があります

に基づいて、上記の理解をさらに深めるために比喩を使用できます。それぞれの業務を遂行する多くの従業員がいる会社があるとします。この通常運営されている会社はプロセスであり、会社内の従業員はスレッドであると考えることができます。会社には少なくとも 1 人の従業員が必要です。同様に、プロセスには少なくとも 1 つのスレッドが必要です。会社では、1 人の従業員にすべてを実行させることもできますが、効率は明らかに高くありません。また、プログラムが 1 つのスレッドしか使用せずに物事を実行できる場合もあります。 Fortune や Basic などの言語にも当てはまりますが、個人会社のように効率は非常に低く、大規模なプログラムを作成すると効率はさらに低くなります。実際、シングルスレッドはほとんどありません。現在は商用ソフトウェアです。社内の従業員が増えれば増えるほど、上司は従業員への支払いも多くなり、従業員を管理し、従業員間の対立や利害を調整するために多大なエネルギーを費やす必要があり、これはプログラムにも当てはまります。スレッドの数も増えます。消費されるリソースが増えると、スレッドの追跡に CPU 時間が使用され、デッドロックや同期などの問題を解決する必要があります。つまり、自分の会社を「皮袋会社」と呼ばれたくない場合は、従業員をもう少し増やす必要があります。プログラムを幼稚に見せたくない場合は、プログラムにマルチスレッドを導入してください。

この記事では、C# プログラミングにおけるマルチスレッド メカニズムについて説明し、いくつかの例を通じてスレッド制御やマルチスレッド間の通信などの問題を解決します。 GUI を作成する面倒な手順を省略し、スレッドの性質をより明確に理解するために、以下のプログラムはすべてコンソール プログラムになっており、プログラムの最後にある Console.ReadLine() でプログラムを途中で停止することができます。実行プロセスを明確に確認できます。

それでは、早速、マルチスレッド C# を体験してみましょう。

2. スレッドを操作する

次の小さなプログラムは、読者に直感的な印象を与えることができます。 / /give current スレッドの名前は「システム スレッド」です

Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState);

Console.ReadLine()
}
}
[ /CODE]

コンパイルして実行すると何が表示されますか?はい、プログラムは次の出力を生成します:

システム スレッドのステータス: 実行中

ここでは、Thread クラスの静的プロパティ CurrentThread を通じて現在実行中のスレッドを取得し、その名前に「システム スレッド」を割り当てます。最後に、現在の状態 (ThreadState) が出力されます。いわゆる静的プロパティは、このクラスのすべてのオブジェクトに共通のプロパティです。このクラスのインスタンスをいくつ作成しても、メモリ内に存在するクラスの静的プロパティは 1 つだけです。 CurrentThread が静的である理由は簡単に理解できます。複数のスレッドが同時に存在しますが、CPU は特定の瞬間にそのうちの 1 つだけを実行できます。

上記のプログラムで示したように、Thread クラスを通じてスレッドを作成および制御します。プログラムの先頭で次の名前空間を使用していることに注意してください:
[CODE]
using System;
using System.Threading

[/CODE]
マルチスレッド メカニズム アプリケーションに関連するすべてのクラスは、System.Threading 名前空間に配置されます。これは、スレッドを作成するための Thread クラス、スレッド プールを管理するための ThreadPool クラスなどを提供します。さらに、スレッドの実行調整、デッドロック、スレッド間通信などの実際的な問題を解決するメカニズムも提供します。アプリケーションでマルチスレッドを使用する場合は、このクラスを含める必要があります。 Thread クラスには、次のようにいくつかの重要なメソッドがあります:

Start(): スレッドを開始します
Sleep(int): 静的メソッド、現在のスレッドを指定されたミリ秒間一時停止します
Abort(): このメソッドは通常使用されますスレッドを終了するには
Suspend(): このメソッドは未完了のスレッドを終了しません。スレッドを一時停止するだけで、後で再開できます。
Resume(): Suspend() メソッドによって中断されたスレッドの実行を再開します

上記は、C# のマルチスレッド機構の予備調査 (1) の内容です。さらに関連する内容については、PHP に注目してください。中国語のウェブサイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。