boost::asio を使用する C++ で記述されたアプリケーションがあります。ソケットでリクエストをリッスンし、リクエストごとに CPU バウンドの作業 (ディスクやネットワーク I/O なしなど) を実行し、レスポンスで応答します。
このアプリケーションはマルチコア システムで実行されるため、リクエストを並行して処理するために、コアごとに (少なくとも) 1 つのスレッドを用意する予定です。
ここで最善のアプローチは何ですか?考慮事項:
- 固定サイズのスレッド プールが必要です (例: CPU ごとに 1 スレッド)
- スレッド数よりも多くのリクエストが到着した場合は、それらをキューに入れる必要があります (おそらく、o/s ソケット レイヤーで?)
現在、サーバーはシングル スレッドです。
- クライアントのリクエストを待ちます
- リクエストを受信すると、作業を実行し、レスポンスを書き戻し、次のリクエストの待機を開始します
アップデート:
より具体的には、サーバーがビジー状態の場合に着信要求がキューに入れられるようにするには、どのメカニズムを使用すればよいですか? N 個のスレッド (コアごとに 1 個) 間で着信要求を分散するには、どのメカニズムを使用すればよいですか?