7

一般に、ブロッキングと非ブロッキングの Winsock TCP ソケットで速度やパフォーマンスに違いはありますか? 両方のソケットの違いはわかりましたが、2 つのタイプの詳細なパフォーマンス比較はありません。

4

2 に答える 2

8

スピードじゃないから。操作writeと操作は、変装したread単なるメモリ コピーです。それらが行うのは、それぞれカーネルとの間でデータをコピーすることだけです。つまり、実際には何も送受信しません

ブロッキングとノンブロッキングの機能は、これらの操作が完了するまでブロックするか、EAGAINすぐに実行できない場合に備えて-1 を返すかを尋ねます。たとえば、ソケットから読み取りますが、受信バッファーには何もありません。recv何かが来るまでぶらぶらするのが好きですか、それとも -1 を返すのが好きEAGAINですか?

于 2012-12-19T07:00:52.200 に答える
7

私の経験では、非ブロッキングの winsock 操作は少し遅くなりますが、はるかにスケーラブルです。実際には、ノンブロッキング I/O (IOCP を使用) を実行する場合は 2 つのシステム コールとアプリケーション レベルでのディスパッチが必要であり、ブロッキング I/O を使用する場合は 1 つのシステム コールが必要です。多くの同時接続がある場合、適切に実装されていればよりスケーラブルなアーキテクチャのため、ノンブロッキング I/O ははるかに高速です。

最大帯域幅でポイント間でデータを転送する必要がある場合は、ブロッキング I/O を使用します。多数の同時クライアント接続を処理する必要がある場合は、ノンブロッキング I/O を使用してください。それらのどれにもあまり期待しないでください。

一般に、これは「イベント駆動型とスレッド型」のサーバー アーキテクチャに関するものであり、次に「ブロッキングと非ブロッキング」に関するものです。どのような状況でも使用できるユニバーサル サーバー アーキテクチャはありません。用途によります。

于 2012-12-19T07:09:15.410 に答える