送信されたパケットを読み取り、それらを処理するUDPネットワークアプリケーションがあります(同じスレッド)。読み取りは非ブロッキングであるため、ポーリングまたは選択を使用していません。
受信したパケットはセッションごとにグループ化されます。
作業は、進行中のセッションがあるかどうかによって管理されます。実行する作業がない場合、つまりセッションがない場合、または処理するパケットがない場合は、スピンする必要があります。
私はここにあるハイブリッドアルゴリズムを見てきました: http ://www.1024cores.net/home/lock-free-algorithms/tricks/spinning
それで遊んでいます。忙しい待ち時間の方が多いと言われています。不要な処理や不必要に高いCPU使用率を防ぐために、どのような方法を使用していますか?
編集:
すべての回答とコメントをありがとう。私は今、次のことをしています。ネットワークからの読み取りに関しては、他にやるべきことがあるかどうかを確認します。ある場合は、タイムアウトをゼロにしてpollを呼び出します。次に、できるだけ多くのパケットを読み取り、処理のためにメモリキューに入れます。他に作業がない場合は、無期限にポーリングします(つまり、-1)。うまく機能しているようです。CPUはビジー状態のときにのみハイになり、それ以外の場合はゼロになります。