[]は、TCP TCPプロトコル通信IO

IOをブロック

、ブロックされていない場合のrecvは、データを受信しました、

相手がデータを送信する場合は、Linuxカーネルバッファは、データを取得します

recvにカーネルデータをコピーします()。ここで、ユーザ空間呼び出します

さらに処理するために、ブロック解除、

IOをノンブロッキング

ポーリングは、データを受信するためにrecv関数を呼び出して、

データは、すぐに返されず、そして呼び出すために続けています

データを読み取るする時期を決定するために、戻り値、

この大規模なCPUの消費、アプリケーションの小さな範囲、一般的に再利用可能なのSelectIOで使用され、

IO多重化

選択機構は、fdは、状態変化の複数をポーリングしてもよいです

recvは、その後、データを読み取るするかどうかを決定するが、上記の両極端のが好きではありません

ポーリングより多くのFDが状態を変更しませんでした。しかし、それはまた、ブロックされます

同時に、待機時間を選択ジャーキーを避けるために、提供することができます、

IO駆動信号

データは、データを読み取るために上位アプリケーションに通知し、到着したとき、信号を確立し、

以下の信号伝送遅延を有するこのモデルは、処理遅延データは、コアデータは、変化してもよいです

  なぜ、駆動信号の遅延が非常に?

  データは、上位アプリケーションに通知するために送信信号を得るため、

  通知後、必ずしもすぐに読むには、

  読む機会を持っている、そして読み取るためにオーバー実行する必要がありました

非同期IO

非同期IO、上位アプリケーションは、バッファ・アプリケーション・レイヤーを提供し、

そこのデータは、上記のように読み込むためのイニシアチブを持っているように、カーネルは、アプリケーション層ではなく、プロセスによって提供されたデータのバッファに詰めイニシアチブを,,かかります、ですが、あなたは一時的に深さでそれを理解することはできません。この複雑なプロセスは、しかし、あなたのことができ必ず、必ずイニシアチブは、処理中に読書の多くが含まれます

おすすめ

転載: www.cnblogs.com/itplay/p/11375441.html
おすすめ