動作は次のとおりです。たとえば、200 個のソケットを持つ 1 つのサーバー ワーカーは、1 秒あたり 100K のエコーを処理します。同じポートで別のサーバー ワーカーを起動すると (各ワーカーのソケット数が同じか、2 倍少なくても問題ありません)、最初のワーカーのパフォーマンスがすぐに約 50% に低下し、マシンごとの全体的なパフォーマンスがわずかに向上します (各ワーカーがサービスを提供します)。 1 秒あたり約 50K のエコー)。
したがって、6 コア マシンのパフォーマンスは、1 コア マシンの場合とほぼ同じです。
各ワーカーに独立した IOCP ポートを 1 つ持つ (CreateIoCompletionPort で NumberOfConcurrentThreads を 1 に指定する)、すべてのワーカーに 1 つの共有 IOCP ポートを試す (NumberOfConcurrentThreads はワーカーの数に等しい) など、さまざまなアプローチを試しましたが、パフォーマンスは同じです。私のワーカーはデータを共有しないため、ロックなどはありません。
Windows カーネル ネットワークのスケーラビリティの問題ではなく、何かが欠けていることを願っています。Windows 7 Enterprise x64 を使用しています。
もちろん、パフォーマンスはほぼ直線的にスケーリングされることが期待されていました。
1 台のマシン上の複数のコアに対する IOCP の実用的なスケーラビリティについて知っている人はいますか? アクティブなソケットの数が増えると、どのような状況が予想されますか?
ありがとうございました!