むかしむかし Indyの紹介 の記事にぶつかり、それ以来ブロックと非ブロックの両方について考えることをやめることはできませんIOそれ以来。
ブロッキングの長所と短所について説明しているいくつかの良い記事を探してIO and non-blocking IO andhow to designそれぞれの場合にアプリケーションを使用して、自然で理解しやすく、コードを維持しやすくします。
大きな画像を理解したい...
よくブロックするIOは、IOが完全に受信されるまで、特定のスレッドはそれ以上何もできないことを意味します(ソケットの場合、この待機は長時間になる可能性があります) 。
ノンブロッキングIOは、IO要求がすぐにキューに入れられ、関数が戻ることを意味します。実際のIOが処理されますカーネルによって後の時点で。
IOをブロックするには、すべてのIOリクエストを待つか、リクエストごとにスレッドを起動する必要があることを受け入れる必要があります(非常にすぐに複雑になります)。
ノンブロッキングIOの場合、複数のリクエストを送信できますが、データは「後」のポイントまで利用できないことに注意する必要があります。データが実際に到着したかどうかの確認はおそらく最も複雑な部分です。
99%のアプリケーションでは、IOブロックを気にする必要はありません。ただし、場合によっては、IOその後、戻ってくる前に何か他のことを行い、できればIOリクエストが完了したことを見つけます。
とにかく、私だけのタッペンス。
Edit:ブロッキングを処理するためのアプリケーションの設計方法に答えるIO良いパフォーマンスを持ちながら、 コルーチン が適しています。
正と負はかなり明確です:
ブロッキング-線形プログラミング、コーディングが簡単、制御が少ない。
ノンブロッキング-並列プログラミング、コーディングが難しく、制御が強化されています。