タイトルは本当にそれをすべて言います。
and ... は、pselect と ppoll も含めることを意味します。
私が取り組んでいるサーバー プロジェクトは、基本的に複数のスレッドで構成されています。各スレッドは、1 つ以上のセッションを処理します。すべてのスレッドは同一です。プロトコルは、どのスレッドがセッションをホストするかを処理します。
私は物事をまとめる社内ソケットクラスを使用しています。興味深い点は、poll (linux) または select (windows) のいずれかを呼び出す checkread 呼び出しです。
要約すると、現在、各スレッドは単一のソケットで poll を呼び出しています。私が知る限り、epoll を使用することは、このスレッドが HTTP サーバーなどの複数のソケットを参照している場合にのみ有効です。私の場合、それは私がしていることではありません。また、このクラスは一度に 1 つのソケットしか処理しません。
epoll のマニュアル ページには、エッジ トリガーとレベル トリガーに関する簡単な説明があります。それが何を意味するのかよくわかりません。ソケット クラスでは、ioctlsocket と FIONREAD を使用して選択呼び出しをショートカットし、データがあるかどうかを確認するコードの Windows 部分に最適化が見られます。呼び出し時に完全な UDP パケットが到着していなくても、それが > 0 を返すかどうか疑問に思っています。これは epoll のエッジ トリガーですか?
いくつかの初歩的なテストでは、select と poll の使用に目立った違いは見られません。
ppoll を使用すると、タイムアウトの精度が向上するため、利点があることがわかります。何かご意見は?
はい、大量のデータを受信するセッションのスループットを最適化しようとしています。サーバーは、CPU よりもネットワークとディスクにバインドされています。