これら 2 つの異なるモデルのどちらがより効率的でしょうか (スラッシング、プロセッサ キャッシュの使用率、全体的な設計、すべてなどを考慮してください)?
1 IOCP と X スレッドのスピンアップ (X はコンピューターに搭載されているプロセッサの数)。これは、私の「サーバー」がすべてのリクエストに対して 1 つの IOCP (キュー) しか持たず、それらを処理/処理するための X スレッドがあることを意味します。この設計の効率性について論じている多くの記事を読みました。このモデルでは、IOCP にも関連付けられるリスナーが 1 つあります。パケット/リクエストの同期を維持する方法を理解できたとしましょう。
X IOCP (X はコンピューターに搭載されているプロセッサの数) であり、各 IOCP には 1 つのスレッドがあります。これは、各プロセッサに独自のキューと、それらを処理/処理するための 1 つのスレッドがあることを意味します。このモデルでは、着信接続を処理し、SOCKET を適切な IOCP (作成された X の 1 つ) に割り当てる別のリスナー (IOCP を使用しない) を用意します。負荷分散を理解できたとしましょう。
2 つの設計 (銀行) の非常に単純化された類推を使用すると、次のようになります。
トランザクションを処理するための複数のレジ係を含む 1 つの行。各人が同じ列に並び、各レジ係が次に空いている人を順番に受け取ります。
各レジ係には独自の列があり、人々はそれらの列の1つに「配置」されます
これら 2 つの設計のうち、どちらがより効率的か。各モデルでは、オーバーラップされた I/O 構造は (「新規」ではなく) MEM_COMMIT で VirtualAlloc を使用するため、スワップ ファイルは問題になりません (ページングなし)。MEM_COMMIT で VirtualAlloc を使用して説明した方法に基づいて、メモリは予約され、ページアウトされません。これにより、SOCKET は中間層を経由せずに受信データをバッファに直接書き込むことができます。したがって、スラッシングが要因になるべきではないと思いますが、間違っている可能性があります。
#2 の方が効率的だという人もいましたが、このモデルは聞いたことがありません。コメントありがとうございます!