私は、よりパフォーマンスの高い、エッジトリガーまたはレベルトリガーの epoll を見つけようとしています。
主に「パフォーマンス」を次のように考えています。
劣化することなく複数の接続を処理する機能。
受信メッセージごとに最高速度を維持する機能。
実は2の方が気になりますが、1も重要です。
私は、単一のスレッド化されたコンシューマー (を使用して複数のソケット接続を受け入れる/読み取るepoll_wait
) と複数のプロデューサーを使用してテストを実行してきました。
これまでのところ、最大 1000 個のファイル記述子でさえ、違いは見られませんでした。
私は、受信される割り込みが少なくなるため、エッジ トリガーのパフォーマンスが向上するはずであるという考え (妄想?) の下で取り組んできました。これは正しい仮定ですか?
パフォーマンスの違いを隠している可能性がある私のテストの問題の 1 つは、受信したメッセージをスレッドにディスパッチしないことです。「タイムスタンプ」を取得するために使用してきたため、このテストを行う__asm__ rdtsc
のが嫌だったので、元のタイムスタンプがどのコアから来たのかを調整する必要はありません。
さらに疑わしいのは、私が見たいくつかのベンチマークで、レベル トリガー epoll のパフォーマンスが優れていることです。
どちらが良いですか?どのような状況で?違いはありませんか?任意の洞察をいただければ幸いです。
私のソケットはノンブロッキングです。