c++ - 设计最快的页面下载

标签 c++ multithreading events sockets network-programming

我有一个包含数百万个 URL/IP 的文件,必须编写一个程序来非常快速地下载这些页面。连接速率应至少为 6000/s,文件下载速度应至少为 2000,平均。 15kb 文件大小。网络带宽为 1 Gbps。

到目前为止,我的方法是:创建 600 个套接字线程,每个线程有 60 个套接字,并使用 WSAEventSelect 等待数据读取。文件下载完成后,立即将该内存地址(下载文件的)添加到管道(一个简单的 vector )并触发另一个请求。当所有socket线程的总下载量超过50Mb时,将所有下载的文件写入磁盘,释放内存。 到目前为止,这种方法并不是很成功,我无法达到超过 2900 连接/秒的速度,下载数据速率甚至更低。

有人可以建议一种可以给我更好统计数据的替代方法吗?我也正在使用 8 Gig 内存的 Windows Server 2008 机器。此外,我们是否需要破解内核以便我们可以使用更多线程和内存。目前我可以创建一个最大值。 1500 个线程和内存使用不超过 2 gigs [从技术上讲应该更多,因为这是一台 64 位机器]。 IOCP 是毫无疑问的,因为到目前为止我没有这方面的经验并且今天必须修复此应用程序。

谢谢大家!

最佳答案

首先,您需要弄清楚是什么限制了您的应用程序。您是否受 CPU 限制、IO 限制、内存限制、网络限制……?您的线程之间是否存在锁定争用?等等……

根据你的描述是不可能的。您将需要在分析器中运行您的应用,以了解瓶颈所在。

关于c++ - 设计最快的页面下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2929586/

相关文章:

c++ - 查找另一个程序的 BUTTON

ruby-on-rails - 如何在 Rails 中测试带有 'Thread.new' 的代码?

java - 具有多个客户端的 Android 套接字服务器..希望接近,但没有雪茄

c# - 等待锁被释放

c# - 私有(private)EventHandler和私有(private)事件EventHandler的区别?

matlab - 函数等待执行

c# - 如何在目标线程上运行事件处理程序

c++ - 如何定义返回 bool 的函数的概念

c++ - 检测习语 : why does the condition have to be a `using` directive?

c++ - 概念中的嵌套类型绑定(bind)在 GCC 和 clang 上失败,但在 msvc 上失败