これを効率的に行うために、アプリケーション(c ++)をマルチスレッド化します。
アプリケーションのメインスレッドは、これらのWebリクエストを作成し、それらをstd::listの後ろにプッシュします。これがメインのアプリケーションスレッドが行うすべてです。
pthread(Windowsでも、私の好みのスレッド方法...)をスポーンし(実行を続け、繰り返しスポーンしないでください)、whileループで同じstd::listをチェックするように設定します。ループでは、リストのサイズを確認し、処理するものがある場合は、リストから先頭の項目をポップします(これらは、ほとんどの場合、ミューテックスを必要とせずに別のスレッドで実行できます。 ..)そしてそれをディスクに書き込みます。
これにより、応答をメモリにキューに入れると同時に、ファイルをディスクに非同期で保存できます。サーバーが実際にあなたが言うほど速い場合は、メモリが不足する可能性があります。次に、処理するアイテムの数が特定のしきい値を超えている場合は、「待機」を実装しますが、これは、シリアルで実行するよりも少しだけ実行されます。
この速度を「改善」する実際の方法は、多くのワーカースレッド(それぞれが独自のstd :: listを持ち、「smart」が最小のアイテムまたは1つのstd :: listをミューテックスと共有してリストにプッシュする)を処理することです。ファイル。複数のハードドライブを備えたマルチコアマシンを使用している場合、これにより、これらのファイルをディスクに保存する速度が大幅に向上します。
もう1つの解決策は、ファイルの保存を多くの異なるコンピューターにオフロードすることです(現在のコンピューター上のディスクの数によって書き込みが制限されている場合)。ZMQ / 0MQなどのメッセージパッシングシステムを使用することで、現在稼働しているものよりも多くのハードドライブにアクセスできるさまざまなシステム(プル方式でセットアップされている)へのファイルの保存を非常に簡単に延期できます。 1台のマシン。ZMQを使用すると、ファンアウトアーキテクチャが組み込まれており、文字通り数分で実装できるため、ラウンドロビンスタイルのメッセージパッシングは簡単になります。
さらに別の解決策は、RAMディスクを作成することです(Linuxでネイティブに、Windows用に簡単に作成できます...私はこれを使用しました)。これにより、問題なく、必要な数のライターでファイルの書き込みを並列化できます。次に、再起動する前に、これらのファイルを実際の保存場所にコピーする必要があります。そうしないと、ファイルが失われます。ただし、実行中は、問題なくリアルタイムでファイルを保存できます。