[ターン]は、プロセススレッド、同期、非同期、非ブロッキングブロッキング同時平行に理解します

基本コンセプト

1つのプロセスとスレッド

プロセス(プロセス):

基本的な考え方は、それがプログラムを実行するために必要なリソースが含まれている、Windowsのシステムです。実行中のアプリケーションは、オペレーティングシステム内のプロセスとして見られているプロセスは、1つ以上のスレッドを含んでもよいですスレッドは、プロセスで同時にコードを実行する複数のスレッドを持つことができ、オペレーティング・システム割り当てるプロセッサ時間の基本単位です。プロセスは比較的独立している間で(分散は、コンピューティングの利用がない限り)、Windowsシステムを他のプロセスの動作には影響しません実行しているプロセスの故障が複数に分かれて作業のプロセスを使用することで、プロセスは他のプロセスのデータにアクセスすることはできません別の領域。プロセスは、国境の基本的なプログラムとして理解することができます。これは、アプリケーションの実行の動的プロセスのルーチンアプリケーションを実行しています。

スレッド(スレッド):

、オペレーティングシステム割り当てるCPU時間の基本単位であり、プロセスはいくつかのスレッドを含むことができ、プロセスにおける基本的な実行単位である第一のスレッドエントリ処理を行うが、このプロセスのメインスレッドとみなされます。.NETアプリケーションでは、エントリとしてmain()メソッドに基づいて、このメソッドを呼び出すときに、システムが自動的にメインスレッドを作成します。CPUレジスタ、コールスタックによって主にスレッド、およびローカルメモリをスレッドその(ローカルストレージ、TLSスレッド)。現在のスレッドを実行するメインCPUレジスタの状態レコードは、コールスタックはメモリとデータにそのスレッドを維持するために使用され、TLSは、主に、ステータス情報のために使用されるスレッドが格納されます。

プロセスとスレッドの違い

プロセスおよびスレッドの主な違いは、異なるオペレーティング・システム・リソースの管理であるということです。プロセスは、別個のアドレス空間を有している、プロセスがクラッシュした後に、プロテクトモードで他のプロセスに影響を与えず、スレッドは、異なる実行パスのちょうどプロセスです。スレッドは独自のスタックとローカル変数を持っていますが、そこに、スレッド間で別々のアドレス空間は、ダイへのスレッドはプロセス全体のダイスに等しいではありませんので、マルチプロセス、マルチスレッドプログラムよりプログラム堅牢ですが、切り替えの過程で、消費します大きなリソース効率が悪化します。しかし同時に要件の一部のみスレッドに、特定の変数の同時動作を共有する必要がために、プロセスが使用することはできません。

  1. 要するに、プロセスは、少なくとも一つのスレッドを有し、少なくとも一つのプログラムプロセスがあります。
  2. プロセスよりも小さいスレッドスケールの部門なので、マルチスレッド・プログラムの同時実行高いこと。
  3. また、プロセスは、実装工程において別々のメモリユニットを有しており、共有メモリの複数のスレッド、それによって大幅にプログラムの効率を高めます。
  4. 実装プロセスにおけるスレッドとプロセスが異なっています。各エントリは、順出口で行わ配列および手順を実行する別のスレッドを有しています。しかし、スレッドは、アプリケーションによって制御される複数の実行スレッドを提供し、用途に応じて存在している必要があり、独立して実行することができません。
  5. 論理的観点から、マルチスレッドアプリケーションプログラム実行部が同時に複数を実行することができることを意味します。しかし、オペレーティングシステムは、スケジューリングと管理と資源配分のプロセスを達成するために、複数のスレッド、複数の独立したアプリケーションとして表示されません。これは、プロセスとスレッド間の重要な違いです。

(同期)を同期および非同期(非同期)

同期:

関数呼び出しは、ない結果になるまで、呼び出しが戻るか、またはフォローアップしていきませんとき、いわゆる同期が発行されます。

簡単に言えば、同期は、このような次のことを行うために行わフロントとして、一つのことを行う必要があります。

例えば:フォーム提出のB / Sモード、具体的なプロセスは次のとおりです。クライアントが要求を提出 - >サーバーの処理待ち - >クライアント(ブラウザ)が何かを行うことはできません。このプロセスでは、加工さに戻ります。

非同期:

呼び出し側は結果ではなかったになるまで非同期および同期コントラスト、非同期プロシージャ・コールが発行されると、その後の操作が進むことができます。通話が終了すると、通常の状態、通知とコールバックを通じて、発信者に知らせます非同期呼び出しの場合、呼び出し側の制御によって返されないコール。

次のように、発信者を通知するには、3つの方法を示します。

  • ステータス:呼び出し側(ポーリング)の状態を監視する、呼び出し側が定期的に再チェックする必要があることは、非常に効率が悪いです。
  • 通知:呼び出し側が実行され、あまりにも多くのパフォーマンスを消費することなく、発信者を知らせる通知。
  • コールバック:呼び出し先の実行が完了したときに通知が同様に、それは、呼び出し側が提供するコールバック関数を呼び出します。

例えば:B / SモードAJAX要求、具体的なプロセスは次のとおりです。クライアントは、Ajaxリクエスト送信 - >サーバー側の処理を - >クライアントコールバックを実行するために処理し、クライアント(ブラウザ)を要求した後、あなたはまだ他の操作を行うことができます事。

同期および非同期の違い:

結論として、同期および非同期の差は:要求が他の動作を実行し続けるために、結果を待つかどうか、行われた後。

3、ブロッキングとノンブロッキング

ときに、これらの二つの概念および手順(スレッド)メッセージ通知を待つ関連(同期または非同期の問題ではない)状態をブロッキングと非ブロッキング。すなわち、プログラム(スレッド)の角度は、メッセージ通知を待つ主ブロッキングと非ブロッキングの状態です。

ブロッキングとノンブロッキング・関心があるの呼び出し(メッセージ、戻り値)の結果を待っている間、プログラムの状態。

呼をブロッキング呼び出しが戻る前に結果を参照し、現在のスレッドは中断されます。唯一の呼び出し元のスレッドが結果後まで戻りません。

非ブロッキング・コールがすぐに結果を得ることはありませいう前に、コールは、現在のスレッドをブロックしません。

4同時パラレル

同時実行:

オペレーティングシステムでは、期間は複数のプログラムを開始した時間を指すは、1つのプログラムだけがある時間内に完成し、これらのプログラムは、同じプロセッサ上で実行されているが、任意の一点の間で実行するために実行していますプロセッサ上で実行されています。動作中の各スレッドに複数のスレッドが、場合、システムは1つのCPUだけである場合、それは単により多くのスレッドより同時に真であることができない、それは唯一のCPU時間は、いくつかの期間に分割されることができ、その後、時間の期間は、割り当てられました実行は、スレッドが実行されているコードの期間に、他のスレッドがサスペンド状態にあります。私たちは、同時呼び出しこの方法(同時)。

パラレル:

システムに複数のCPUがある場合、スレッド非並行して動作することが可能です。CPUは、スレッドを実行する際に、他のCPUは、二つのスレッドが別のスレッドを実行することができると、我々はこのように平行を呼び出す(パラレル)、同時に行うことができるCPUリソースをつかむありません

並行性と並列性の違い:

あなたは半分の食事を食べて、携帯電話、そしてあなただけが同時サポートしませ並列をサポートしない手段、食べた後、ピックアップする必要があります。
それは同時実行のためのあなたのサポートを示し、食事の後に続けて、その後、あなたは、携帯電話を半分の食事を食べ、そしてあなたは、携帯電話を停止し拾います。
サイドを食べながら、あなたはそれがあなたのサポートパラレルを示し、半分の食事、電話、およびお使いの携帯電話を食べます。

キーは同時に、必ずしも、あなたが同時に複数のタスクを処理する能力を持っているではありません。パラレルキーを使用すると、複数のタスクを処理する能力を持っています。

だから私は、彼らが最も重要なポイントだと思います:それはあるかどうかを同時に


2つの非同期およびマルチスレッドの違いは?(原則記事)

1非同期との違いは何ですかマルチスレッド?

実際には、目的は非同期であり、かつマルチスレッドは、この目的を達成するための方法です。非同期の平均は、Aは(時間のかかる操作せずに、一般的に、より多くの時間のかかる操作は、非同期の必要はありません)アクションを開始した後、我々は自身の利己的なものに対処していき、これを乾燥していない待機を行います時間のかかる操作に戻ります。

類似点と二つのスレッドと非同期操作を超える違い

マルチスレッドと非同期操作の両方が呼び出し元のスレッドを回避する目的を達成することができ、それによってソフトウェアの応答性を改善し、ブロックされています。時には私たちも、マルチスレッドと非同期操作が同等な概念だと思います。しかし、マルチスレッドと非同期操作は、まだいくつかの違いがあります。マルチスレッドとの非同期操作の無差別使用によって引き起こされるこれらのタイミングの違い。

3基本的に非同期操作

すべてのプログラムは、最終的にはとても良く、非同期操作の性質を理解するために、我々はそのハードウェアを見てする必要があります基づいており、コンピュータのハードウェアで実行されます。コンピュータハードウェアDMAの友人に泊まったが、確かに言葉には見知らぬ人、ハードディスク、CD-ROMの技術仕様は、実際には明確な指標DMAモード、ネットワークカード、サウンドカードを持っていない、グラフィックスカードもDMA機能です。DMAであることを、ダイレクトメモリアクセス手段であり、ハードウェアは、データの交換の時間とメモリのDMA機能は、CPUリソースを消費しないことがあります。転送が完了し、ハードウェアトリガーに終了した操作を通知する割り込みをした後に限り、CPUは、データ送信の開始時にコマンドを送信して、データを交換するには、独自のハードウェアとメモリーを開始しました。これらの必要性は、CPU時間のI / O操作のハードウェアベースの非同期操作で消費しません。でもこのようなDOS(プロセス概念と無線)システムのような単一のプロセスでも、非同期DMA動作を開始することができます。

自然の4つのスレッド

スレッドには、コンピュータのハードウェアの機能ではありませんが、スレッドが実行され、スケジューリングするオペレーティングシステムのCPU資源を投入する必要があるので、オペレーティング・システムの論理的な機能は、スレッドは、基本的に同時に実行するコードのプロセスです。

非同期操作の5つの利点と欠点

追加のスレッド負担なしで非同期動作するので、治療へのコールバック方式を使用し、うまく設計では、ハンドラは共有変数を(完全にないていない場合は、少なくとも、あなたが共有変数の数を減らすことができます)を使用する必要はないかもしれない、死んで減少可能ロック。もちろん、非同期動作は完璧ではありません。非同期操作を書くの高い複雑さは、プログラムは主にデバッグに入ると難しい普通の人々の思考のいくつかの方法で対処するコールバックの方法を使用していました。

6つのスレッドを超える長所と短所

  • 長所:プログラミングが簡単ですので、ハンドラスレッドは、心の普通の人々の習慣に沿って、まだ実行の順序です。
  • 短所:使用するスレッド(虐待)コンテキストスイッチングシステムの追加負担は、スレッド間で共有変数がデッドロックにつながる可能性があるでしょう。

非同期およびマルチスレッドの非同期ビュー、およびマルチスレッドの弁証法的関係の観点からは、対等な関係ではありません。目的は、マルチスレッド、非同期であるが、我々は、非同期達成するための手段を持っています。
非同期何です:コール要求は、その結果を待たずに、発信者が、呼び出し元に送信されたときに、非同期に返されます。非同期マルチスレッド技術を使用することができるか、または別のプロセスが処理されるべきです。


三個の非同期、マルチスレッドと並列の違いは?(ストーリーパート)

これで、非専門家の言語の通訳を使用するための非専門家、比喩がちではありませんが、おそらくその意味で、

話を私に聞きます:

これは、10年前に年間12306ませんでした、あなただけ購入する鉄道駅への切符を購入することができます。我々はすべてまだ待ちたい、新年のバックホームを持っているため、鉄道駅には、一つのウィンドウのみがああ頭痛だけそんなにです。もっと面倒はない夜間ではなく、チケットを立っ導体が、高価ではなく、要求のすべての種類は、インクのすべての種類、より多くの不安、1怒り、呪いの背後にある人々......、男の窓に排出されます。父親は、BS-INGの。

今、都市全体が一つだけの列車、導体、1分を考えると、各乗客を相談した導体列車の切符を購入する決定する必要があることを前提としています。

  1. 非同期:人々がチケットを購入相談した後、1分を考える必要があり、あなたはすぐにチケットを買いに行く導体に話を明確に考えることができたときに、すぐに身を引くが、再び並ばないでください。時間の隣に立っている人の考え方では、当時の人々が買うために急ぎました。今回はチームが非常に速く、導体の効率を最大化するために、障害なく、動いています。

  2. マルチスレッド:nは駅開いているウィンドウ(まだのみチケット1枚)、... n行のチームの外ながら、導体回答質問の質問の後、馬は次のウィンドウを立ち上がって、その後、次のウィンドウに回転し続けます人々は窓が良いかを決める。、導体は彼のために買った過去の飛びました。今回の乗客は比較的簡単ですが、チームは悲劇の人の後ろに絡まっ長い間考えていた場合。

  3. パラレル:コピーnは鉄道駅、同時にチケットを販売し、大幅に強化されたチケット。我々はまた、数人の切符を買いに行きました駅を訓練することができます。

可視:鉄道駅で、かつ例のみ導体、その後、販売を販売し、前方に移動させることは困難である、チームが立ち往生し、非効率、資源の浪費につながります。チームのすべてを解決するために、1,2-最適化された方法は、低チケット販売の問題は移動しません。しかし、ウィンドウを上げる、鉄道駅を増加させ、それが導体を高めるための良い方法です。

結論:

  1. 多くの人がもつれたときに行く代わりに、1分、5分を過ごすためにそこに行くされている一方、実際には、非同期およびマルチスレッドの効率はほとんどが、多くはない開いているウィンドウは、例えば3つ、マルチスレッドの効率があるため、導体、実際には非同期よりも低くなっています立ち往生しながら、または通常のチケットのためにキューに入れることができないもつれで3回遭遇しました。

  2. これら二つの概念は、それらが概念はないので、不適切なビットを対比するために使用される、またはマルチスレッドの非同期、マルチスレッドの非同期の目的を達成するための手段であるべきです。非同期同期は私の息子を比較するために話をする必要があります。

  3. マルチスレッドは、比較的単純であるが、追加のウィンドウを必要とし、コストが増加し、導体のNode.jsでのApache、PHP、JavaScriptとの関係と同様であり、最悪の場合であった、マルチスレッドされているが、ブロックされ、他方は、シングルスレッドの非同期非ブロッキングでありますA。より少ないリソースで従来の考え方に沿って、より多くのPHPプログラムが、より多くのコストのメモリ、非ブロッキングのNode.jsは、同じタスクを実行することができますが、プログラミングが混乱します。

  4. 並行して、マルチコアCPUの各コアの同様の使用は、計算しています。擬似複雑に分けて並行して、本当に複雑。前者は、例えば、同時シングルコアプロセッサ、マルチコアプロセッサの並行開発を指します。

  5. あなたは各コアをフルに活用することができるように究極の方法は、各CPUで計算平行、および非同期コンピューティングします。しかし、プログラミング要件が高すぎる高すぎると、しない集中コンピューティングなら、このような大きな有限要素法(使用より多くの同時)、またはアクセスサーバ同時にプロセス数千(またはそれ以上使用非同期マルチスレッド)として、または正直です伝統的な方法は、すべての後に、ハードウェアの計算ルーチン手続きの量今、問題は大きくありません。


四は、ノンブロッキングの非同期同期差を遮断しますか?(ストーリーパート)

同期ブロッキングを理解した上で、非同期、非ブロックの非同期を遮断する、同期、非同期ブロックを非ブロック

同期/非同期メッセージ通知メカニズムは、関係、及びブロッキング/非ブロッキングの懸念は、メッセージ通知を待機するプログラム(スレッド)の状態です。

暁明ダウンロードファイルのアナロジーには、これら2つのフォーカスグループは、全員の理解を促進することを望んで、再びこの概念を説明するためのものです。

  1. 同期ブロック:暁明は、それが完了した時点の100%にダウンロードプログレスバーを見つめてきました。
    完了通知で、ダウンロードを待つ;:同期がに反映されている
    にも反映ブロッキング:通知プロセスを完了するために、ダウンロードを待ち、他の処理タスクを実行することはできません。

  2. ノンブロッキング同期:暁明そうでない場合は実行するダウンロードタスクの提出後、すべてのプログレスバーで一目にしばらく行くに一度は、100%の完全なを見ました。
    ;ダウンロードを待つ完了通知ですが、あなたが望む:同期がに反映されている
    にも反映非ブロック:通知プロセスを完了するために、ダウンロード、そうでなければ行うべきタスクが、時折、プログレスバーで一目を待つ; [タスクを切り替える暁明の必要性をダウンロードの進行状況をフォロー]

  3. 非同期ブロック:暁明は、ダウンロードは、「チーン」の音に完了すると、ソフトウェアのダウンロード完了通知機能を変更しました。しかし、暁明はまだ(それ、愚かに見えるしません)「チーン」の音を待って。
    ダウンロードが完了し、「チーン」の音通知である;:非同期に反映さ
    に反映ブロッキング:ダウンロードは、「チーン」のサウンド通知処理を完了するのを待ち、他の処理タスクを実行することはできません。

  4. 非同期非ブロック:まだダウンロードタスクの提出後になります「チーン」サウンド、そして暁明が完了知るために「チーン」の音を聞いて、そうでなければ行うためのソフトウェアをダウンロードしてください。
    ;ダウンロードが完了し、「チーン」の音の通知です:非同期に反映
    ダウンロードは「鼎」のサウンド通知処理を完了するのを待ち、そうでない場合は実行するタスク、およびのみ通知するように「チーン」の音を受信する必要がある。[処理ソフトウェアのダウンロード:に反映非ブロック進行に注意せずに、他のタスクを処理するためのタスク、暁明、単純にソフトウェア「チーン」のサウンド通知を受け取ります]

言い換えれば、同期/非同期は異なるでは、道(メカニズム)通知プロセス(他のタスクを行うことはできません)「をダウンロード完了のメッセージを」通知「を完了メッセージをダウンロード」、およびブロッキング/ノンブロッキングが待ち状態になっているありますシナリオ、同期/非同期、ブロッキング/非ブロッキングの4つの組合せが適用されます。

だから、合計する、同期および非同期のメカニズムは唯一の方法メッセージ通知を懸念、ブロッキングとノンブロッキング・懸念がメッセージ通知を待っている状態ですされています。言い換えれば、場合にメッセージ自体は、メッセージがトリガされ、そして場合は、それらのメッセージに対処するための非同期通知メカニズムによってトリガーされたので、非同期機構では、メッセージが処理されているかどうかを確認するために待っていると、トリガ機構を処理する人によって同期相互接続を橋渡しする必要があります。

ボブのケースでは、このブリッジは、ソフトウェア「チーン」の音です。

同期/非同期、ブロッキング/ノンブロッキング

  1. 同期ブロッキングフォーム
    効率は、ダウンロードが完了するためにあなたが何かをしない、待ち時間を集中という点である、上記の例を取るために、最低です。実際のプログラム:O_NONBLOCK読みはフラグFD /ライト動作に設定されていません。

  2. ブロッキング非同期形
    非同期操作は、ライブにブロックすることができますが、メッセージの処理中にそれがブロックされていないが、通知を待っている間にメッセージがブロックされています。最後のタイムアウトパラメータで渡された場合たとえば、機能を選択し、NULLがあり、その後、イベントがトリガされた場合、プログラムはselect呼び出しこの場所でブロックされている問題ではありません。

  3. 同期非ブロック形式は
    、その後、まだダウンロードをルックアップする必要はありませんが、あなたが他の事を行う一方、他の何かをやっている場合、完全であることを想像し、操作の二つのプログラムとしてダウンロード場所の完了を観察し、実際には非効率的ですこのプログラムは、前後に切り替えるのこれら二つの異なる振る舞いの間で効率が低いと想像する必要があります。多くの人々は、読み取り/書き込み操作をブロック書きますが、あなたは、あなたが操作を同期させることができるように、FDにO_NONBLOCKフラグを設定することができます忘れないでください、非ブロッキングになります。

  4. ノンブロッキングの非同期フォーム
    より効率的なあなたは、ダウンロードを待つための完全である(ウェイター)の事、そしてあなたの通知は、コンピュータ(メッセージのトリガー機構)のもので、プログラムは、2回の異なる操作で前後に切り替わりません。

おすすめ

転載: www.cnblogs.com/leomessi10/p/11882303.html