13

に基づいて tcp サーバーをプログラミングすることを考えていますepoll。最高のパフォーマンスを実現するために、マルチコア サポートも実装したいと考えています。しかし、調査中に次の疑問が浮かびました: epoll_wait()2 つの異なるスレッドから 2 つの -Call を呼び出し、それぞれがデュアル コアで独自のファイル記述子を監視する方が高速ですか? epoll_wait()それとも、これはすべてのファイル記述子を監視する単一の呼び出しと同じくらい高速ですか?

カーネルはファイル記述子を監視するので、ユーザー空間の呼び出しで使用するスレッドの数は問題ではないと思いますepoll_wait()か?

4

2 に答える 2

18

エッジ トリガー (EPOLLET) モードを使用している限り、同じ epoll_fd に対して複数のスレッドで同時に epoll_wait を呼び出すこともできます (同期に注意してください)。このアプローチを使用すると、シングルスレッドの epoll イベント ループと比較して、マルチコア マシンで実際のパフォーマンス上の利点を得ることができます。

しばらく前に実際にパフォーマンス測定を行ったことがあります。結果については、ブログの投稿を参照してください。

于 2012-09-18T20:27:36.420 に答える
0

あなたが言及した2つのシナリオでは、 epoll 自体のパフォーマンスに違いはないということは正しいと思います。OTOH との違いは、各スレッドにイベント ループを持たせることで、接続を処理するために別のワーカー スレッドにコンテキスト スイッチを切り替える必要がないことです。これは、たとえば、nginx の仕組みです。たとえば、http: //www.aosabook.org/en/nginx.html を参照してください。

于 2012-09-18T18:02:53.897 に答える