3

私はソケットジャングルを通り抜けようとしていますが、I/Oが重複しているノンブロッキングソケットに出くわしました。私は家に3冊の本を持っていますが、それはこの概念についてのみ言及していますが、実際にはそれを説明したり、例を挙げたりしていません。

だから私が探しているのは、これが例で説明されている記事、または私が自分で取り組むことができる単なる例です。これがWindows用であればいいのですが、UNIXからも転送できるはずです。

私は本を​​出典として気にしませんが、さらに50ドルを避けて喜んでいます。これまでのところ、私は非常に基本的な概念と他のソケットモデルとの基本的な比較しか見つけませんでした。彼らのコンセプトがわからないということではありませんが、彼らの行動を見て、彼らがどのように機能するかについての良い説明を得たいと思います。(私は長い記事をまったく気にしません:))

4

1 に答える 1

2

「ノンブロッキングソケット」というフレーズは通常、FIONBIOソケットオプションの使用を指します。これは、読み取る準備ができているデータがない場合でも、read()を呼び出すとすぐに戻ります。(EWOULDBLOCKエラーで戻ります。)

重複したI/Oは、Windows APIに固有のものです(たとえば、UNIXでは使用できません)。FIONBIOソケットオプションは使用されません。また、従来のバークレーソケットAPI関数呼び出し(read()など)も使用されません。

(LinuxでのPOSIXに相当するものについては、「man aio」を参照するか、お気に入りの検索エンジンにman aioと入力してください。)

「ノンブロッキングソケット」と「オーバーラップI/O」は2つの異なるアプローチである(混合しない)ことを理解したので、それぞれについて役立つ記事を見つけるのははるかに簡単です。

オーバーラップしたI/Oに関するMSDNのドキュメントは、実際には非常に優れています。Windowsプログラミングを行っている場合は、パフォーマンスとスケーラビリティが重要な場合は、オーバーラップI/Oを使用する必要があります。これが良い出発点です:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx

(このMSDNの記事はパイプに関するものですが、ソケットを使用してもまったく同じです。)

また、WaitForMultipleObjects()は、I / O完了ポートを使用する場合と同様にスケーリングされないことに注意してください。ただし、最初に前者に慣れてください。

于 2012-09-18T12:08:49.843 に答える