多数のソケット接続を処理するプログラム(Webサービス、p2pシステムなど)で使用できるオプションがいくつかあるようです。
- ソケットごとにI/Oを処理するために、個別のスレッドを生成します。
- selectシステムコールを使用して、I/Oを単一のスレッドに多重化します。
- ポーリングシステムコールを使用して、I / Oを多重化します(選択を置き換えます)。
- epollシステムコールを使用して、ユーザー/システムの境界を介してソケットfdを繰り返し送信する必要がないようにします。
- ポーリングAPIを使用して、接続の総数の比較的小さなセットをそれぞれ多重化する多数のI/Oスレッドを生成します。
- epoll APIを使用して、独立したI / Oスレッドごとに個別のepollオブジェクトを作成することを除いて、#5と同じです。
マルチコアCPUでは、#5または#6が最高のパフォーマンスを発揮すると思いますが、これをバックアップするハードデータはありません。Webを検索すると、上記の#2、#3、および#4の作成者テストアプローチの経験を説明するこのページが表示されました。残念ながら、このWebページは約7年前のものであり、最近の明らかな更新は見つかりませんでした。
だから私の質問は、これらのアプローチのどれが人々が最も効率的であるとわかったか、そして/または上記のどのアプローチよりもうまく機能する別のアプローチがありますか?実際のグラフ、ホワイトペーパー、および/またはWebで利用可能な記事への参照をいただければ幸いです。