次のようなタスクを含むスレッド プールのサイズを決定するための基本的な規則は何ですか。
- 常にネットワークにバインドされています。
- 異なるスループットとレイテンシで外部サービスにアクセスします。
私の主な関心事は、帯域幅を最適に使用することです (つまり、タスクを連続して処理しないでください。ただし、1200 のネットワーク接続も開かないでください)。
次のようなタスクを含むスレッド プールのサイズを決定するための基本的な規則は何ですか。
私の主な関心事は、帯域幅を最適に使用することです (つまり、タスクを連続して処理しないでください。ただし、1200 のネットワーク接続も開かないでください)。
ネットワーク アクセスは同期ですか、それとも非同期ですか?
ネットワーク アクセスとリクエスト処理が非同期の場合、スレッド プールのサイズは => 利用可能なコア数 + 1 になります。
更新:利用可能なコアとは、システムで利用可能な物理プロセッサの数を意味します。サーバーが非同期 I/O を使用して複数の物理プロセッサを利用する場合でも、スレッド プールが必要です。
ネットワーク アクセスと要求処理が同期している場合、スレッド プールのサイズを決定するための厳格なルールはありません。この場合、常にスレッド プール サイズを構成可能にすることをお勧めします。リクエスト処理が CPU バウンドでない場合、デフォルト値のゲストは次のようになります。
(リクエスト処理のレイテンシー/ネットワークのレイテンシー) * (使用可能なコアの数 + 1)、最大値は 4 * 使用可能なコアの数。
私は専門家ではありませんが、タスクごとに 1 つのスレッドを持つべきではありませんか? スレッドは、データが利用可能になるまでブロック/ポーリングします。接続を待機している場合は、接続ハンドラで各接続を処理するスレッドを開始します。