0
通常、readの準備ができているソケットを待つためにselect()を使います。しかし、writefdsもselectに渡された場合、fdsが読み込み可能か書き込み可能かがすぐに返されます。問題は、ほとんどの場合ソケットが書き込み可能であることです。これはビジーループを引き起こしませんか?書き込み可能なfdsのためにselect()を実行するとビジーループが発生しますか?
通常、readの準備ができているソケットを待つためにselect()を使います。しかし、writefdsもselectに渡された場合、fdsが読み込み可能か書き込み可能かがすぐに返されます。問題は、ほとんどの場合ソケットが書き込み可能であることです。これはビジーループを引き起こしませんか?書き込み可能なfdsのためにselect()を実行するとビジーループが発生しますか?
何か書いたことがあるときだけ書込み可能にする必要があります。読んでも同じです - あなたはデータを受け取る準備ができているときだけ読めるのを待ちます。書き込みが成功するたびに、write()
が読み込まれ、読み取りに成功した後にはread()
になるはずです。
これらの基準を満たしていると、ストリームが無限大でないかソケットバッファが無制限でないため、ビジー待機ループを導入できません。