高性能I / Oシステムの設計では、いくつかの概念があり、多くの場合、私たちは困惑します。次のように:

1同期とは何ですか?

2非同期とは何ですか?

3何をブロックされていますか?

4ノンブロッキングとは何ですか?

5同期ブロックとは何ですか?

6同期非ブロッキングは何ですか?

7非同期ブロッキングは何ですか?

8非同期ノンブロッキングとは何ですか?

実際の生活の例を与えるために最初:

あなたは宮保鶏丁丼を食べたい場合は、

同期ブロック:あなたがレストランで食事に行くが、そこ待っているだけでなく、叫んだ:まあ、ああではありません!

非ブロッキング同期:レストランでのエンドポイントの食事は、犬の散歩に行ってきました。しかし、しばらくの間残る、彼は叫ぶために戻ってレストランに行きました:まあ、ああではありません!

非同期ブロック:レストランでは、あなたが個人的にピックアップすることができ、そのご飯も電話を受けたときに犬の散歩。

非同期ノンブロッキング:回答呼ばれるレストランは、我々が来て、あなたにしばらくを送信するためにあなたの場所を知って、その上で犬の散歩安心します。

 

もっと知るためにいくつかの質問の前に、我々は最初の同期であるかを理解する必要があり、明らかにこれらの概念の非同期、ブロック、非ブロック、唯一の理解、そして理解するために組み合わせて、それが比較的容易です。

図1は、同期および非同期対話型アプリケーションとの用語のカーネル用です。

2ブロッキングおよび非ブロッキングは、白色を取る準備ができてI / O操作に応じて、処理中のデータにアクセスするためのさまざまな方法であると、リードを達成又は操作機能を記述する方法です。機能を読み書き、ブロックモード下で機能を読み書き、非ブロッキングモードながら待ちますすぐにステータス値を返します。

 

上記10個の言葉で要約することができる。同期および非同期、ブロッキングと非ブロッキングの目的は、実装されています。

1同期:I / O操作をトリガし、ユーザ・プロセスを参照し、ポーリングを待つか、I / O操作の準備ができているかどうかを確認しに行きます。個人的にこれをやって、服を買うために彼らの通りは、他に何もすることができません。

2つの非同期:非同期が完了するまで、彼らは自分自身のことをやって始まった後、I / O操作をトリガし、ユーザ・プロセスを参照し、I / O操作がの「I / Oの完了」(非同期機能は通知で)通知されます。非同期を使用した(右の服のサイズ、色、スタイルは、買うために友人を委託し、その後、彼らは買い物をし、何か他に行くことができる彼らの友人に話したときにI / O、JavaのI / O読み、OSのプロセスに委ね書き込み、データ・バッファの必要性OSを渡されたアドレスとサイズ)。

3ブロック:いわゆるブロックモードは、物事が読めるなかった、または書面一時的に利用できない場合にまで、読み書きする何かがあるまで、プログラムが待機状態になり、読み、ファイル記述子への書き込みをしようとしたとき、ということを意味。地下鉄の駅を充電するために、再充電が今回は(おそらくトイレに行ってきました)存在しなかった、と我々は待つだけと再充電がこれまでに帰宅するまで待ちました。

4ノンブロッキング:非ブロッキング状態、何かが、読み取り、書き込み、またはしないようにされていない場合、この関数はすぐに待たずに読んで返します。小さなチケットを受け取るために、銀行でビジネスを行うと、その後、我々は携帯電話で再生することができ、または、それが私たちの番であるとき、話者が銀行に通知します、他の人と私たちはビジネスで実行されます。この時間をチャット。

 

I / O要求と実際のI / O操作を開始:I / O操作は、実際には2つのステップに分け。

同期I / Oおよび非同期I / Oの差は、実際のI / O読み取り処理をブロック書き込み要求を、その同期I / Oである場合には、第2のステップは、ブロックされていることです

I / Oをブロックし、ブロックされていない場合、非ブロッキングI / Oとの間の差は、I / Oが完了するまでブロックされた場合、それは伝統的なブロックI / OがブロックされるかどうかI / O要求を開始するための最初のステップであること、すなわち、ですノンブロッキング

I / O。

 

 

同期および非同期の相互作用は、同期の観点からアプリケーションとカーネルのためであるユーザプロセスを指し、I / O操作をトリガし、ポーリングを待つか、I / O操作が所定の位置に見に行く、と非同期の引き金ユーザプロセスを指し、I / O操作は、自分のことを行うようになった後、および完了するためにI / O操作が通知されますとき、I / Oを完了しました。

ブロッキングプロセス内のデータにアクセスするためのさまざまな方法のための非ブロッキング、読み取りまたは実装方法はっきりそれを取るために準備状態I / O操作に応じて、機能を読み書きする機能を記述するための方法を阻止することでした待って、モードを非ブロックしながら、書き込み機能は、すぐにステータス値を返します。

同期ブロッキング(すなわち、初期動作BIO)、同期非ブロッキング(NIO)、非ブロッキング非同期(AIO):したがって、I / O操作は、次の3つのカテゴリに分けることができます。

同期ブロック(BIO):

このように、I / O操作を開始した後、ユーザー・プロセスを実行するために、あなたが本当に完全なI / O操作を感じた場合にのみ、I / O操作の完了をユーザプロセスを待たなければなりません。JAVA、従来のI / Oパターンは、このように属しています。

同期非ブロック(NIO):

このように、ユーザは、I / O操作は、他のことを行うために後で戻ることができ、プロセスを開始しますが、ユーザーは、定期的にユーザーを必要な場所でのI / O操作は、不要な導入、質問をするかどうかを尋ねるために随時に処理する必要がありますCPUリソースが無駄になります。現在、JavaのNIOは、同期のノンブロッキングI / Oを所属します

非同期ノンブロッキング(AIO):

このモードでは、ユーザーはプロセス、将来的にI / O操作を開始し、カーネルを待たないI / O操作が完了すると、プロセスは、コアI / O操作の完了後にユーザーに通知します。

 

同期のブロッキングI / O(JAVA BIO):

同期とのブロッキング、サーバが接続するスレッドのためのモデルを実装し、そのクライアントを使用すると、接続はそれがスレッドの不要なオーバーヘッドが発生します何もしない場合は、処理のためのスレッドを開始する必要があるサーバへの接続要求を持っています。もちろん、それは、スレッドプールのメカニズムによって改善することができます。

 同期非ブロッキングI / O(JAVA NIO):非ブロッキング同期は、サーバーがスレッドの実現のモードを要求し、クライアントによって送信された接続要求がマルチプレクサに登録されている、すなわち、マルチプレクサはポールに接続されていますI / O要求が処理のみのためにスレッドを開始があります。ユーザプロセスは時間から質問をするために、定期的にユーザプロセスを必要とし、時間I / O操作の準備ができている場合に依頼する必要があります。

非同期I / O(JAVA NIO)のブロッキング:

このように、I / O操作が完了するために、アプリケーションが実際に最も重要な同期および非同期の違いであるI / O操作の完了、後にカーネルに通知します待つことなく、同期を待つ必要があり、将来的にはI / O操作を開始したアプリケーションを指し、またはI / Oの完了を依頼するためのイニシアチブを取る、そしてなぜそれがブロックされていますか?この時点で完了し、それ自体は実装をブロックしている機能を選択し、選択機能を使用するためにselectシステムコールを介して行われますのでUNPの観点から見た場合、それが監視できるという利点が(同時に複数のファイルを処理している、選択同期するために属していますその後、選択したため、操作は、プロセスは、それによってシステムの並行性を高め、)データを読み書きする必要があります!

非同期I / O(JAVA AIO(NIO.2))をノンブロッキング:

このように、ユーザーが実際に完了した後、I / O操作のプロセスを開始する必要があり、すぐに戻って、他のI / O操作、アプリケーションを完了するために、I / O操作が通知され、ユーザはデータのみを処理する必要があります実際のI / O読み取りおよび書き込み操作は、カーネルによって完成されているので、治療のように、実際のI / O読み取りおよび書き込み操作を必要としません。

 

 

BIO、NIO、シーン解析のAIOアプリケーション:

接続モードの数が比較的少ないBIOと固定アーキテクチャに適用され、このようにサーバリソースは、比較的高い、限定された同時実行アプリケーション、JDK1.4以前の唯一のオプションですが、プログラムは直感的で理解しやすいです。

このようなチャットサーバ、限られた同時アプリケーション、より複雑なプログラミングなどのマルチモードに適した短い(ライト動作)アーキテクチャに接続されたNIO接続数は、JDK1.4のサポートを開始します。

AIO方法は、接続の数よりも多くに適用可能であり、接続が完全に同時動作に参加するためにOSを呼び出して、そのようなアルバムサーバとして(重い操作)アーキテクチャ、比較的長く、プログラミングは、JDK7をサポートするために始めた、より複雑です。

 

 


 します。https://my.oschina.net/u/553266/blog/3022046リンクに転載。