IOをブロック
、ブロックされていない場合のrecvは、データを受信しました、
相手がデータを送信する場合は、Linuxカーネルバッファは、データを取得します
recvにカーネルデータをコピーします()。ここで、ユーザ空間呼び出します
さらに処理するために、ブロック解除、
IOをノンブロッキング
ポーリングは、データを受信するためにrecv関数を呼び出して、
データは、すぐに返されず、そして呼び出すために続けています
データを読み取るする時期を決定するために、戻り値、
この大規模なCPUの消費、アプリケーションの小さな範囲、一般的に再利用可能なのSelectIOで使用され、
IO多重化
選択機構は、fdは、状態変化の複数をポーリングしてもよいです
recvは、その後、データを読み取るするかどうかを決定するが、上記の両極端のが好きではありません
ポーリングより多くのFDが状態を変更しませんでした。しかし、それはまた、ブロックされます
同時に、待機時間を選択ジャーキーを避けるために、提供することができます、
IO駆動信号
データは、データを読み取るために上位アプリケーションに通知し、到着したとき、信号を確立し、
以下の信号伝送遅延を有するこのモデルは、処理遅延データは、コアデータは、変化してもよいです
なぜ、駆動信号の遅延が非常に?
データは、上位アプリケーションに通知するために送信信号を得るため、
通知後、必ずしもすぐに読むには、
読む機会を持っている、そして読み取るためにオーバー実行する必要がありました
非同期IO
非同期IO、上位アプリケーションは、バッファ・アプリケーション・レイヤーを提供し、
そこのデータは、上記のように読み込むためのイニシアチブを持っているように、カーネルは、アプリケーション層ではなく、プロセスによって提供されたデータのバッファに詰めイニシアチブを,,かかります、ですが、あなたは一時的に深さでそれを理解することはできません。この複雑なプロセスは、しかし、あなたのことができ必ず、必ずイニシアチブは、処理中に読書の多くが含まれます