9

Linux 3.2.0、x86_64を使用しています。複数のスレッドから1つのソケットに対してaccept()を同時に呼び出すことはできますか?

4

1 に答える 1

13

はい、accept()複数のスレッドと複数のプロセスから同じリスニングソケットを呼び出すことができますが、思ったほど多くのポイントがない場合があります。カーネルは1つだけ成功することを許可します。これがプロセスで行われる場合、それはプリフォークと呼ばれ、fork()新しい接続ごとにの費用を節約します。ただし、スレッドを処理している場合は、新しい接続のキューを待機する既存のスレッドプールをより簡単に作成できます。1つのスレッドがacceptキューを実行して書き込み、ワーカースレッドがキューを読み取って処理を実行します。それはよりきれいで、よく理解されたパターンであり、あなたはほとんど何も失うことはありません。

于 2012-07-15T00:45:36.783 に答える