【发布时间】:2010-05-28 13:56:19
【问题描述】:
我有一个包含数百万个 URL/IP 的文件,并且必须编写一个程序来快速下载页面。连接速率应至少为 6000/s,文件下载速度至少为 2000,平均。 15kb 文件大小。网络带宽为 1 Gbps。
到目前为止,我的方法是:创建 600 个套接字线程,每个线程有 60 个套接字,并使用 WSAEventSelect 等待数据读取。文件下载完成后,将(下载文件的)内存地址添加到管道(简单向量)并触发另一个请求。当所有 socket 线程的总下载量超过 50Mb 时,将下载的所有文件写入磁盘并释放内存。 到目前为止,这种方法并不是很成功,我无法达到超过 2900 个连接/秒的速度,下载数据的速度甚至更低。
有人可以提出一种可以给我更好的统计数据的替代方法吗?我也在使用 8 Gig 内存的 windows server 2008 机器。此外,我们是否需要破解内核以便我们可以使用更多的线程和内存。目前我可以创建一个最大值。 1500 个线程和内存使用量不超过 2 gigs [技术上应该更多,因为这是一台 64 位机器]。 而且 IOCP 是毫无疑问的,因为我目前还没有这方面的经验,今天必须修复这个应用程序。
谢谢各位!
【问题讨论】:
-
如果您需要处理超过 2 GB 的空间,请将其编译为 64 位(但您的代码可能还没有准备好),或者将 32 位应用程序与 /LARGEADDRESSAWARE 链接(这应该在 64 位系统上为 32 位应用程序提供 4GB 空间)
标签: c++ multithreading events sockets network-programming