非常に多くの(100K以上)長寿命の接続を維持する必要があるカスタムサーバーを実装しています。サーバーはソケット間でメッセージを渡すだけで、深刻なデータ処理は行いません。メッセージは小さいですが、それらの多くは毎秒送受信されます。レイテンシーの削減は目標の1つです。複数のコアを使用してもパフォーマンスが向上しないことを認識しているため、オブジェクトの呼び出しrun_one
またはpoll
メソッドを使用して、サーバーを単一のスレッドで実行することにしました。io_service
とにかく、マルチスレッドサーバーは実装がはるかに難しいでしょう。
考えられるボトルネックは何ですか?システムコール、帯域幅、完了キュー/イベントの逆多重化?ハンドラーのディスパッチにはロックが必要な場合があると思います(これはasioライブラリによって内部的に行われます)。boost.asioでキューロック(またはその他のロック)を無効にすることは可能ですか?
編集:関連する質問。syscallのパフォーマンスは複数のスレッドで向上しますか?私の感じでは、syscallはカーネルによってアトミック/同期されるため、スレッドを追加しても速度は向上しません。