同期/非同期/ブロッキング/非ブロッキング/ BIO / NIO / AIO種々ブリーフィング

ミス従来の

第2段階で、ユーザの詳細を示すデータの詳細を取得するためのHTTPインタフェースを呼び出し、その後、適切なビューは、データの詳細を示して使用する必要があると仮定。

速度が非常に遅い場合、コードはHTTP要求を開始し、それがHTTPレスポンスを取得するには10秒後まで、これ以上立ち往生しないし、次にダウン続けます。

あなたが人々を尋ねる今回は、単にコードは、他の当事者がそう答える必要があり、要求は同期要求ではありません開始しました。そう、それは本当にです。

しかし、あなたは、それはそれである理由を尋ねることがありますか?「要求を開始した後、コードは応答がダウンして取得するために続けることができた後まで動かさないで立ち往生しているので。」他には、答えのようなものでなければなりません

:私は多くの人々が、それは抗因果関係に従事している、これは間違っている、実際には、そうは思われていないと信じて

いないコードを貼り付けたように、コードは同期要求を呼び出すことが何より立ち往生しているため、それが同期要求であるため、これ以上。

:スタックは、オペレーティングシステムやCPUによって決定され、動くことができない理由については

、対応する機能のカーネル空間が動かない詰まっユーザーの宇宙発射システムコールで、その結果、動いていない立ち往生されますので、ユーザーコードで、プログラムをこれ以上立ち往生ません。

だから、立ち往生同期要求のちょうど副作用を移動しないで、それを定義する方法を、次に、同期要求を定義するためにそれを使用しないのですか?


同期および非同期

と呼ばれる同期は相乗的なペースであることを意味します。今相乗効果と呼ばれ、これに少なくとも二つ以上のものが存在するがなければなりません。相乗結果:

することはできませんより多くの物事は、以前のものの終了後、一つ一つにする必要があり、次の事が始まりました。

事が進行しているとき、他のものはそれをやっていますか?

通常、リソースの前の前の物事や事柄の結果に依存する必要性の背後にある通常のものが使用されているので、厳密にこれが必要とされていない話すが、「待機中」の状態にあるのが一般的です。

したがって、それは個別にシリアル化された関係一つずつ同期が、それは物事の複数の全体としてのマクロから懸念の多くの希望であることが考えられる、絶対クロスの場合は発生しません。

だから、当然、特定の事柄に注意を払う可能性が低いとは何な状態である瞬間です。

この理論の応用見事な「ラインアップ」ではないが行かなければなりません。どこに需要のシナリオでは、より少ないリソースとより多くのラインアップに使用されます。

例えば、電車の切符にそれを買うために並ぶ:

あなたが唯一のチケットを販売することができますので、実際には、チケットホールは、乗客の切符を購入するウィンドウに一つずつより心配です。

でも、すべての熱狂は周りに行く、または唯一のチケットを販売することができ、なぜわざわざ?私たちは一緒にして危険な群がりました。

一部だけ質の悪い人、上の取得しようとする必要があり、チケットホール独自の目的のためにキューイングこの形の、1枚のチケットによって、すなわち1の無代わります。

各旅客線の状態としては、それはそれを見たり、電話、話す、気にする必要はありませんことです。

アウターリードリソースの同期化以来、この同期に加え、生じさらに論理的な順序があるので。

例えば、コードを更新し、次にコンパイルし、次に再パッケージします。ステップは前のステップ、をこの順に行うように一つだけを使用するので、これらの操作が生じます。

同期についても二つの小さな点を知っておく必要があります。

スコープはまず、グローバル同期に行く必要はありません、あなただけの特定のキーポイントで同期を実行する必要があります。

たとえば、唯一の食堂の販売米のウィンドウは、確かに、人の買いが同期され、次の人が購入します。夕食が終わっされているヒトである。しかし、次の人がそれを食べるようになりましたか?もちろんそうではありません。

第二に、大きさではなく、同期の大きな粒子サイズを有する唯一のものは、同期の物事の小さなサイズがあります。

 

しかし、物事は自然の同期のサポートの一般小さなサイズであり、物事は多くの場合、手動処理の大きなサイズを同期する必要があります。

同期手動で二つのスレッドを処理する必要がありますが、二つの文の糸のような自然の同期です。

いわゆる非同期は、ペースが異なっています。それは異なっているので、それは同じではありません。だから、結果は次のとおりです。

あなたはあなたの事を遂行できる以上、私は、すべてのものが同時に進行している人、コントロールしていない行きました。

 

一言で言えば、同期は、同時に複数の物事は、同時に起動することができます非同期複数の物事を開始することができないです。

 

注:「もっと何か」を体験して行くようにしてください、複数のスレッドが複数のものは、複数の方法がより多くのものがあり、より多くの物事は複数の文は、複数のCPU命令は複数のものです。などなど。

 

 

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

目詰まりを妨げる参照すると、ブロックいわゆる。それは、それが原因の障害が発生したため移動できませんでした意図として理解することができます。

 

ノンブロッキング、いわゆるブロッキング性質が相対的である、それは障害物が存在しないと理解し、スムーズ続けることができます。

これは、2つの単語、今日の中国の主要な交通問題、交通渋滞の最高の解釈です:

車は時間の正常な経過することができ、非ブロッキングです。ブロックされ、そしてすべてが巣、動かうそたら、ブロックされています。

 

したがって懸念が動いていない、非ブロックの懸念を遮断することが可能動きです。

 

結果は、あなたがその移動の結果を移動することができ、だけ待つことができるように移動することはできません。

そのためには、単語待ちでブロックし、そして単語を行わなければならないと非ブロックする必要があります。

戻るプログラムに、同じブロッキングは非ブロッキングショーがダウンして続けることができ、停止して待つことを意味します。


ブロッキングと待っています

ちょうどそれを阻止するの副作用を待って、それは時間をかけて、意味のある事が起こらないかがあることを示しています。

障害物の本当の意味は、あなたが継続するので、あなたが待って維持することはできません何らかの理由で気にするものです。これはあなたが関連物事を待つには影響しませんので、しかし、そうで乾燥し、する必要が、あなたは、いくつかの他の無関係なことを行うことはできません。

ときに交通渋滞、あなたはそうで行うことができます。また、携帯電話を再生し、他の人とチャット、またはカードをプレイ、さらには何を食べに行きましたことができます。これらの事は影響しませんので、あなたは交通渋滞を待ちます。しかし、あなたの車は場所に滞在しなければなりません。

コンピュータでは、その誰もが、このようなドライでの選挙のように、それのブロックは、その最も簡単なので、実装する際にCPUができるように、通常、スレッドだけを中断する必要があり、柔軟ではありません。条件が満たされたとき、それがスレッドを再スケジュールします。


2個ずつ組み合わせ

いわゆる同期/非同期の懸念は、それは同時に起動することができないということです。

いわゆる、ブロッキング/非ブロッキングは、注意がそれは動くことができないということです。

推論を組み合わせて:

同期のブロッキング、あなたは動けなく、同時に起動することはできません。唯一の道、1は車の上に、悲しいことに、まだTMDによってブロックされることができます。

同期非ブロッキングは、同時に開始することはできませんが、移動することができます。唯一の道は、一つは唯一車を通じて、幸いなことに、通常の通過することができことができます。

非同期ブロッキングは、あなたが同時に開始することができますが、移動することはできません。複数の経路、各ルートは、TMDのすべてによってブロックされて腹立たしい、スポーツカーすることができます。

非同期ノンブロッキング、あなたが仕事を開始することができ、あなたが移動することができます。複数の経路、各ルートは、スポーツカーすることができ、クールはすべて、通常のトラフィックです。

ああを理解することは非常に簡単ではありません。実際には、あなたがこの点を理解している場合、その焦点は、異なっている、またそれは、ものの組み合わせです。

戻るスレッド一緒にプログラムにし、それらを関連付ける:

スレッドの待機と同等の同期ブロッキングを、。

同期非ブロッキング、スレッド実行するのと同じ。

非同期ブロック、複数のスレッドの同等を待っています。

非同期ノンブロッキング、複数のスレッドの同等が正常に実行されています。

 

 

I / O

/書き込みデータプロセスを読み、IOを指し待つ読み取り/書き込みデータプロセス。データにデータを操作した後だと、それはIOではありません。

IOネットワークを取り、プロセスはカードにカーネル空間に、ネットワークからのデータを待っているとされます。プロセスを読み書きすると、別のコピーカーネル空間とユーザ空間です。

 

従ってIOは、プロセスは、プロセスがデータを待っている、2つの処理を読み取りと書き込み(コピー)されているデータを含みます。しかし、また、確かに、理解していないデータの操作を含めることができます。

 

 

IO IOをブロックし、非ブロック

アプリケーションは、ユーザ空間で、彼らはユーザ空間でも動作することができ、データを実行しています。ユーザーがデータ空間に到達しない限り、この方法を理解するためによると、ユーザーがスレッド上で動作することはできません。

 

ユーザスレッドが関与している場合、それはIOの上にブロックされます。多くの場合、IOをブロックと言われています。ユーザ・スレッドは、データまたはコピーされたデータを待機してブロックされています。

 

非ブロッキングIOのユーザスレッドが上記二つのプロセスに関与していないされた後、つまりデータは、ユーザスレッド、データを直接操作することができる上の一アップを通知するために、ユーザ空間にコピーされています。

 

物事は多くの場合、非ブロッキングIOと言われてIOを、表示されるので、ユーザスレッドがブロックされていません。

 

 

IOとIOをブロック同期同期

同期の上記の理解によると、同期の意味がIO IO要求後に開始される実行し続けることができ、IOデータを取得する必要があります。

プログラムの形態2分割さに応じて:

データを待っている間に、データをコピーする処理、スレッドがブロックされ、これは、同期ブロッキングIOです。

データを待っている過程で、データをコピーするプロセスで無限ループポーリングを使用してスレッドは、スレッドがブロックされ、これはIOブロッキング依然として実際に同期しています。

 

多くのオンラインの記事は、これは間違いである、第二の同期のノンブロッキングIOに分類間違って、データをコピーするプロセスは、スレッドがブロックされているので、それは、IOをブロックしなければなりません。

厳密に言えば、IO、同期とノンブロッキングの概念は、彼らが夫婦の概念に反しているためでは不可能です。

IO IOの同期は、彼らが継続する前に、データを取得しなければならないことを意味します。以来、その後の操作は、IOデータに依存するので、それがブロックされなければなりません。

非ブロックIOは、IO要求を開始することを意味した後、我々はダウンし続けることができます。それは確かに同期していないので、命令は、IOデータに依存しない従ってください。

したがって、IOで、同期および非ブロッキングが相互に排他的であるので、何の同期非ブロッキングIOは存在しません。しかし、非ブロック同期があり、それは何のIOません、操作データを呼ばれます。

 

したがって、IO IOブロッキング同期している必要があり、IO同期はIOをブロック同期です。

 

 

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

非同期の上記の理解によると、非同期IO IO要求が打ち上げを指し、あなたはIOデータが継続することができ得ることはありません。

 

ユーザスレッドを続行し、プロセスのオペレーティング・システムのIOデータ作成が同時に行われるため、それが非同期IOと呼ばれています。

2つのIOデータに従う方法は、二つのタイプに分けることができる:

データをコピーする処理を継続するために、データのためのユーザスレッドを待っている間、スレッドがブロックされ、これはIOブロッキング非同期です。

データを待っているのプロセス、およびデータをコピーするプロセスでは、ユーザー・スレッドは、非同期の非ブロッキングIOである、継続しています。

 

最初のケースでは、ユーザスレッドがデータを待っているのプロセスに関与していないということですので、それは非同期です。しかし、ユーザーのスレッドがデータをコピーするプロセスに関与し、それがブロックされています。一緒にIOをブロックし、非同期です。

後者の場合は、それが非同期であるので、待っているのプロセスに関与するユーザスレッドでもないが、コピー処理に参加しなかったということです。それは、通知を受信すると、データが準備され、IOデータが遮断ので、そうではありませんので、ノンブロッキングです。一緒に非同期の非ブロッキングIOがあります。

 

おすすめ

転載: www.cnblogs.com/zhouyixian/p/11116539.html