10

誰でも epoll_wait に関する質問に答えるのを手伝ってくれませんか。

  1. 約 100K のアクティブなソケットでサービスを提供するために、同じ fds セットで epoll_wait を呼び出す多くのスレッドを使用するのはやり過ぎですか? それとも、epoll_wait を実行するスレッドを 1 つだけ作成するだけで十分でしょうか?

  2. たとえば、データを読み取る準備ができているソケットが 1 つしかない場合、epoll_wait からウェイクアップするスレッドの数は? つまり、2 つ以上のスレッドが epoll_wait からウェイクアップするが、結果のイベントに同じ fds があるという状況が発生する可能性はありますか?

  3. 多くのアクティブなクライアント (例: 50K+) で動作するサーバーでスレッドを整理する最良の方法は何ですか。私が考える最善の方法は、epoll_wait と i/o 操作を実行する1 つの I/O ワーカー スレッドです。+ I/O ワーカー スレッドから受信したデータを処理する多くのデータ処理スレッド(ゲーム ロジックなど、時間がかかる場合があります) と、I/O ワーカー スレッドがクライアントに送信する新しいデータを作成します。私はこのアプローチで正しいですか、またはこれを整理するための最良の方法を見つけるのを手伝ってくれる人はいますか?

前もってありがとう、バレンティン

4

3 に答える 3

12
  1. epoll を使用する場合、スレッドの合計を、処理に使用する物理 CPU コア (またはハイパースレッド ディスパッチ ユニット) の数に合わせます。作業に 1 つのスレッドのみを使用するということは、一度に多くても 1 つのコアがアクティブになることを意味します。

  2. epoll ファイル記述子のモードに依存します。イベントは、アトミックに 1 回だけ発生することを意味する「エッジ トリガー」、またはバッファーにスペースがある場合に任意の呼び出し元がイベントを取得することを意味する「レベル トリガー」のいずれかです。

  3. 言うほど情報不足。簡単にするために、特別な目的のスレッドをまったく持たず、各イベントの「コマンド」を受信したスレッドで処理することをお勧めします。しかし、明らかにそれはアプリケーションの性質に依存します。

于 2010-01-18T18:10:03.617 に答える
5

2006年からのこの読書をお勧めします:http://www.kegel.com/c10k.html

于 2010-01-18T17:14:40.337 に答える