У меня есть файл с миллионами URL-адресов / IP-адресов, и мне нужно написать программу, чтобы действительно быстро загружать страницы. Скорость соединения должна быть не менее 6000 / с, а скорость загрузки файлов не менее 2000 с avg. Размер файла 15кб. Пропускная способность сети составляет 1 Гбит / с.
Мой подход до сих пор был следующим: создание 600 потоков сокетов, каждый из которых имеет 60 сокетов, и использование WSAEventSelect для ожидания чтения данных. Как только загрузка файла будет завершена, добавьте этот адрес памяти (загруженного файла) в конвейер (простой вектор) и выполните другой запрос. Если общая загрузка всех потоков сокетов превышает 50 МБ, запишите все файлы, загруженные на диск, и освободите память.
До сих пор этот подход был не очень успешным с той скоростью, с которой я мог достичь, не стреляя выше 2900 соединений / с и загружая скорость передачи данных еще меньше.
Может кто-нибудь предложить альтернативный подход, который мог бы дать мне лучшую статистику. Также у меня работает windows server 2008 с 8 Гб памяти. Также нам нужно взломать ядро, чтобы мы могли использовать больше потоков и памяти. В настоящее время я могу создать макс. из 1500 потоков и использования памяти, не превышающей 2 гигабайтов (что технически должно быть намного больше, поскольку это 64-битная машина).
И о IOCP не может быть и речи, поскольку у меня пока нет такого опыта, и я должен исправить это приложение сегодня.
Спасибо, ребята!