C#マルチスレッド学習(1)マルチスレッドの関連概念

プロセスとは何ですか?
プログラムが実行を開始すると、それはプロセスであり、プロセスには、実行中のプログラムと、プログラムが使用するメモリおよびシステムリソースが含まれます。
プロセスは複数のスレッドで構成されています。

スレッドとは?
スレッドはプログラムの実行フローであり、各スレッドには専用のレジスター(スタックポインター、プログラムカウンターなど)がありますが、コード領域は共有されます。つまり、異なるスレッドが同じ関数を実行できます。

マルチスレッドとは何ですか?
マルチスレッドとは、複数の実行ストリームを含むプログラムを指します。つまり、プログラム内で複数の異なるスレッドを同時に実行して、異なるタスクを実行できます。つまり、単一のプログラムが複数のスレッドを作成して、並列に実行してタスクを完了することができます。

マルチスレッドの利点:
CPU使用率を改善できます。マルチスレッドプログラムでは、スレッドが待機する必要がある場合、CPUは待機する代わりに他のスレッドを実行できるため、プログラムの効率が大幅に向上します。

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

次に、C#プログラミングのマルチスレッドメカニズムについて説明します。GUIを作成するという面倒な手順を節約し、スレッドの本質にもっと明確に近づくために、次のプログラムはすべてコンソールプログラムであり、プログラムの最後のConsole.ReadLine()は、実行プロセスを明確に確認するためにプログラムを途中で停止します出力で。

プログラムが実行されると、少なくとも1つのメインスレッドが存在します。

直感的なスレッドの例:

// System を使用したSystemThread.cs  ;  System.Threading を使用します。 名前空間 ThreadTest { クラス RunIt   {     [STAThread] static void  Main(string [] args)     {       Thread.CurrentThread.Name = " System Thread " ; // 给当前线程起名是 "System Thread"             Console.WriteLine(Thread.CurrentThread.Name + " 'Status:" + Thread.CurrentThread.ThreadState);       Console.ReadLine();     }   } }





  



    
 







出力は次のとおりです。
システムスレッドのステータス:実行中

ここでは、Threadクラスの静的プロパティCurrentThreadを介して現在実行中のスレッドを取得し、そのNameプロパティに「System Thread」を割り当て、最後に現在の状態(ThreadState)を出力します。

いわゆる静的属性は、このクラスのすべてのオブジェクトに共通の属性です。このクラスのインスタンスがいくつ作成されても、クラスの静的属性はメモリ内に1つだけです。CurrentThreadが静的である理由は簡単に理解できますが、同時に複数のスレッドが存在しますが、特定の時点では、CPUはそのうちの1つしか実行できません。

プログラムの先頭では、次の名前空間を使用します:
     using System;
     using System.Threading; 
 
.netフレームワーククラスライブラリでは、マルチスレッドメカニズムアプリケーションに関連するすべてのクラスがSystem.Threading名前空間に配置されます。アプリケーションでマルチスレッドを使用する場合は、このクラスを含める必要があります。

提供されているThreadクラスを使用してスレッドを作成および制御します。ThreadPoolクラスは、スレッドプールの管理などに使用されます。
(さらに、スレッド実行スケジューリング、デッドロック、スレッド間通信などの実際的な問題を解決するメカニズムも提供します。)

Threadクラスには、次のような重要なメソッドがいくつかあります:
Start():start thread;
Sleep(int):staticメソッド、現在のスレッドで指定されたミリ秒数を一時停止します
。Abort():通常、このメソッドを使用してスレッドを終了します
。Suspend():このメソッドは未完了のスレッドを終了せず、スレッドを一時停止するだけで、後で再開できます。
Resume():Suspend()メソッドによって中断されたスレッドの実行を再開します。

元の記事を28件公開 15のような 110,000以上の訪問

おすすめ

転載: blog.csdn.net/z3h0a5n8g8x9i9a2o3/article/details/8598601