Работа в 300 потоков через GET - ускорить?

TotKto

Client
Регистрация
12.07.2013
Сообщения
123
Реакции
12
Баллы
18
Буду рад вашим подсказкам
Есть шаблон
Логика -
1) Берем строку из текстового файла
2) Делаем гет-запрос
3) Записываем результат в текстовый файл

Браузер отключен
Все очень просто

На 100 потоках получается 1000 результатов в минуту
Мало
Запускаю на 300 потоков
Результат 800 в минуту

Еще меньше чем в 100 потоках

Подозреваю из-за того что мы читаем и записываем в один и тот же файл на всех потоках
Как можно ускорить работу?
какие есть варианты работы на 300-400 потоках с записью - чтением файлов?

Спасибо
 
Мне несколько раз советовали использовать базы данных, но как то дело не дошло. Возможно это бы решило ситуацию.
 
  • Оценить
Реакции: TotKto и Lord_Alfred
Я рекомендую в работе с многопотоками отказаться работать с файлами для получения исходных данных а использовать БД. Тут есть несколько, на обьемах заметных фактора - скорость, надежность, нагрузка.

А конкретно по Вашему случаю получается так что в первом варианте задачу обслуживает 100 ресурсов сервера во втором 300 плюс надо учитывать тот момент, что инстансы в постере выполняются последовательно.
 
Последнее редактирование:
  • Оценить
Реакции: TotKto
На 100 потоках получается 1000 результатов в минуту
Мало
Запускаю на 300 потоков
Результат 800 в минуту

Еще меньше чем в 100 потоках
Так же это может из-за забитого интернет канала.

надо учитывать тот момент, что инстансы в постере выполняются последовательно.
Внимательнее :)
Браузер отключен
 
  • Оценить
Реакции: TotKto и one
Была такая же ситуация, ничего не помогало пока ее перешел на базы данных. Уверен на 99% что поможет.
 
  • Оценить
Реакции: [Pacman] и TotKto
Я с таким сталкивался, когда парсил один сайт: первый файл - список урлов, второй файл - резалт парсинга урлов.

Вообщем придумал такую штуку.

Сделал 100 циклов выполнения шаба (то есть 100 урлов парсилось за 1 выполнение), но запись в файлы была только в начале и в конце шаблона.
Все данные, пока шёл цикл в 100 итераций, сохранялись во временные списки (не привязанные к файлам): в начале шаба - бралось 100 урлов из файла во временный список1, в конце шаба - писалось 100 резалтов в файл из темпового списка2.

Таким образом снизил колво обращений потоков к файлам - скорость сильно увеличил.

Надеюсь понятно описал :-)
 
Если с базами данных категорически не хочется связываться (а зря, т.к. я тоже в первую очередь посоветовал бы их), то можно попробовать извернуться и поставить себе RAMDisk и писать/читать данные с файлов с этого диска.
Слышал (первый спойлер), что помогает такое
 
  • Оценить
Реакции: TotKto и ibred
Если с базами данных категорически не хочется связываться (а зря, т.к. я тоже в первую очередь посоветовал бы их), то можно попробовать извернуться и поставить себе RAMDisk и писать/читать данные с файлов с этого диска.
Слышал (первый спойлер), что помогает такое
Ну раз так часто последнее время интересуются Рам-дисками, то я в той теме вывел отдельный спойлер по нему:
*************************************
Что такое RAM-диск и как его создать
«RAM-диск» - это технология, позволяющая использовать часть системной оперативной памяти как дополнительное дисковое устройство, то есть «сверхбыстрый» мини-диск.
Сделать такое можно программой «SoftPerfect RAM Disk 3.4.8 Free». Уже есть версия 4, но она платная, можете искать ломанную на варез-трекерах; 3.4.5 версия идет в комплекте с Total Commander PowerUser (тот черный командер, который на моих видео). Из гугла по ней: обзор1, обзор2, видео. Отдельно стоит заметить, что в случае перезагрузки ПК - данные с рамдиска стираются.
*************************************
 
Последнее редактирование:
Отдельно стоит заметить, что в случае перезагрузки - данные с рамдиска стираются (что по логике понятно, но на всякий случай лучше это упомянуть лишний раз).

PS: лично я юзаю рамдиск для "Trash" в настройках ZennoPoster (Инстанс -> Путь к кукам и кэшу). Особого прироста не замечал, но зато не забивается основной диск кучей файлов и профилей, которые генерируются во время работы ZP.

PPS:
3) Записываем результат в текстовый файл
Подозреваю из-за того что мы читаем и записываем в один и тот же файл на всех потоках

Если использовать файл, в который пишется результат как "список", то 100% будут блокировки этого файла при чтении/записи между потоками. А если просто использовать экшен "Файлы" и "дозаписывать в конец", то скорее всего таким образом можно ещё вытянуть дополнительную скорость.
 
  • Оценить
Реакции: TotKto и orka13
Попробовать данные писать во временный список и в конце работы или когда нужно переписать в файл.
Код:
Развернуть Свернуть Копировать
using TT;


namespace TT
{
    public class ListA
    {
        public static List<string> Spisok = new List<string>();
    }
   
}
К общему коду добавьте чтото вроде этого и пишите в лист через: TT.ListA.Spisok.Add("");
 
К общему коду добавьте чтото вроде этого и пишите в лист через: TT.ListA.Spisok.Add("");

А как взять строку с удалением и взять все данные из такого списка... в общем тема не раскрыта, добавление вроде срабатывает
 
Попробовать данные писать во временный список и в конце работы или когда нужно переписать в файл.
Код:
Развернуть Свернуть Копировать
using TT;


namespace TT
{
    public class ListA
    {
        public static List<string> Spisok = new List<string>();
    }
  
}
К общему коду добавьте чтото вроде этого и пишите в лист через: TT.ListA.Spisok.Add("");
Я правильно понимаю, что если список используется в цикле и в его конце стирается, то лучше переделать во временный список?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)