UDP ソケットからデータを読み取るコードを継承しました。ここで何が起こっているのかを理解するための助けが必要です.また、パフォーマンス全体を改善できるかどうか.
このコードは、まず select() を呼び出し、次に recvfrom() を呼び出します。私の調査によると、recvfrom() は、select() が利用可能なデータがあるという事実を返したときにのみ呼び出されるようです。このコードは基本的に、マルチキャスト メッセージを継続的にリッスンするスレッドで構成されています。その結果、データを受信するかタイムアウトするまで、基本的に select() ルーチンに留まります。
このコードのパフォーマンスを改善するためのより良い方法があるのではないかと考えていました。まず、select() は必要ですか? このスレッドに基づいて: UDP ソケットの recv fcn のタイムアウトを設定すると、recvfrom() コマンド自体のタイムアウトを設定できるようです。これで何か買えますか?また、いくつかの調査に基づいて、select() を使用しない多くの実装を見てきました。どうしてこれなの?
また、理想的には、できるだけ多くの CPU を解放したいと考えています。パケットを受信するまでプロセスをスリープ状態にする方法はありますか? そうは言っても、簡単にするために、一度に完全なパケットを受け取りたいと思います。
助けてくれてありがとう。