スレッド、スレッドプール、同時実行、同期、非同期、ロック

1000年のログの例を記述し、同時に複数のスレッドのシミュレーションを見てください:


クラスプログラム{

    静的な無効メイン(文字列[] args){


        スレッドT1 =新しいスレッド(ワーキング)。

        t1.Name =「スレッド1」; //ログを書くために3つのスレッドをインスタンス化します。

        スレッドT2 =新しいスレッド(ワーキング)。

        t2.Name =「スレッド2」。

        スレッドT3 =新しいスレッド(ワーキング)。

        t3.Name = "Thread3"。


        //ターンは3つのスレッドを開始します。

        t1.Start();

        t2.Start();

        t3.Start();


        Console.ReadKey();

    }


    //各スレッド仕事でしばらく

    静的な無効ワーキング(){

        //ログ動作シミュレーション1000年を書きます

        以下のために(INT I = 0、I 1000 <; iは++){

            Logger.Write(Thread.CurrentThread.Name +は、 "ログを書き込み:" + I + "上の "+ DateTime.Now.ToString()+" のn \。");

        }いくつかの他のイベントを行います//

        以下のために(INT I = 0、I 1000 <; iは++){}

    }

}


同時実行: 

複数のユーザーが同じリソース(このリソースは、サーバーにログオンすることができ、これはSQL操作の実装であってもよいし、FTPサーバ上のファイルを作ることができる、など、またはプログラムにおけるグローバル変数の一つであるために競うので、我々私たちは、このリソースを呼び出すことができます:グローバルリソース)。 

説明: 

プログラム自体がマルチスレッドであるかに起因する場合、同じリソースに対する要求時に、複数のユーザーが同じリソースを要求によって複雑になります。 

例えば: 

金融システムは、操作のためのお金の同じ総量の2人は、10プラスマイナス100は、同時に実行されるこれら二つの動作に注意を払う、そしてシステムが加算または減算し、これは問題によって複雑になるかどうかわからないということ。代替的に、複数のスレッドが同時に同じリソースを要求し、リソースデータは必然的に危険につながる、スレッドBは、データ処理スレッドを変更し、スレッドBは、数学(スレッドセーフな)スレッドを変更しました。


非同期: 

リソースを要求するスレッドが、全く同期機構が存在しないため、このリソースは、B内のスレッド中である、スレッド 

それでも待たずに、このリソースにスレッドを要求します。 

同期: 

リソースを要求するスレッドが、同期メカニズムがあるので、このリソースは、スレッド要求B内のスレッド中です 

以下、どのように行うには、スレッドが待つことができます。


同期および非同期: 

明らかに、最も安全、最も保険の同期。危険な非同期は、簡単にデッドロックにつながり、これは死んだスレッド全体につながります 

プロセスがクラッシュしたが、何の同期機構が存在しない、性能が向上します。同期および非同期のためになるような選択をしなければなりません。


おすすめ

転載: blog.51cto.com/14028890/2404437