HTTPリクエストの前処理/後処理用にTCPベースのデーモンを構築しています。クライアントはApacheHTTPD(またはIIS)に接続し、カスタムApache/IISモジュールが要求をTCPデーモンに転送してさらに処理します。私のデーモンは、大量のトラフィックを処理するためにスケールアップする必要があります(ただし、スケールアウトはしません)。ほとんどの要求は小さく、短命です。デーモンはC++で構築され、クロスプラットフォームである必要があります。
私は現在、自然にフィットしているように見えるブーストasioライブラリを調べています。ただし、スタックレスコルーチンとスレッドプールパターンのメリットを理解するのに苦労しています。具体的には、HTTPサーバーの例3とHTTPサーバーの例4をここで見ています:http ://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/examples.html
すべてのグーグルにもかかわらず、スタックレスコルーチンサーバーのメリットと、マルチコアシステムのスレッドプールサーバーと比較してどのように機能するかを完全に理解することはできません。
私の要件を考えると、2つのうちどちらが最も適切ですか、そしてその理由は何ですか?どうぞ、スタックレスコルーチンのアイデアに関するあなたの答えを「おろそかに」してください。私はまだここで不安定な状況にあります。ありがとう!
編集:議論のための別のランダムな考え/懸念:Boost HTTPサーバーの例#4は、「スタックレスコルーチンを使用して実装されたシングルスレッドHTTPサーバー」として説明されています。OK、それで完全にシングルスレッドです(親プロセスが子に「フォーク」した後でも?例4のserver.cppを参照してください)...シングルスレッドはマルチコアシステムのボトルネックになりますか?ブロッキング操作を行うと、他のすべてのリクエストの実行が妨げられると思います。これが実際に当てはまる場合、スループットを最大化するために、コルーチンベースの受信データ非同期イベント、内部ブロッキングタスク用のスレッドプール(マルチコアを活用するため)、そして非同期送信およびクローズ接続メカニズムを考えています。繰り返しますが、スケーラビリティは重要です。何かご意見は?