为了有效地做到这一点,我会多线程你的应用程序(c++)。
您的应用程序的主线程将发出这些网络请求并将它们推送到 std::list 的后面。这就是您的主应用程序线程将要做的所有事情。
产生(并保持运行,不要重复产生)一个 pthread(我首选的线程方法,即使在 Windows 上......)并将其设置为在 while 循环中检查相同的 std::list。在循环中,确保检查列表的大小,如果有要处理的事情,将最前面的项目从列表中弹出(这些可以在不同的线程中完成,而不需要互斥锁......大多数时候。 ..) 并将其写入磁盘。
这将允许您在内存中对响应进行排队,同时将文件异步保存到磁盘。如果您的服务器真的如您所说的那样快,那么您可能会耗尽内存。然后,如果要处理的项目数量超过某个阈值,我将实施一些“等待”,但这只会比串行执行好一点。
“提高”速度的真正方法是让许多工作线程(每个都有自己的 std::list 和“智能”推送到具有最少项目的列表或一个 std::list 与互斥锁共享)处理文件。如果你有一台带有多个硬盘的多核机器,这将大大提高将这些文件保存到磁盘的速度。
另一种解决方案是将文件的保存分流到许多不同的计算机上(如果当前计算机上的磁盘数量限制了写入)。通过使用诸如 ZMQ/0MQ 之类的消息传递系统,您将能够非常轻松地将文件保存到不同的系统(以 PULL 方式设置),并且可以访问比当前更多的硬盘驱动器一台机器。使用 ZMQ 使得循环式消息传递变得微不足道,因为内置了扇出架构,并且实际上只需几分钟即可实现。
另一个解决方案是创建一个 ramdisk(在 linux 上很容易在本地完成,对于 windows ......我用过这个)。这将允许您使用任意数量的编写器并行写入文件,而不会出现问题。然后,您需要确保在重新启动之前将这些文件复制到真实的存储位置,否则您会丢失文件。但是在运行过程中,您可以实时存储文件而不会出现问题。