@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Живая связь двух скриптов **BAS**
-
@artihorror said in Живая связь двух скриптов **BAS**:
@Fox нашел как нагрузку на проц уменьшить? 8х2.5 85-90% хавает в 80 потоков
8х2.5 Это в смысле восьмиядерный проц с частотой 2.5 гигагерца?
Нагрузку на проц очень хорошо снижает пропуск кадров, @support хотел как то сделать надстройку, чтобы регулировать для каждого потока пропуск кадров. Но пока её нет, я реализовал через два скрипта. Один парсит нужную информацию с пропуском кадров 1 и записывает в базу. А второй скрипт с огромным пропуском кадров 2000 (рендерит один кадр в 30 секунд) применяет полученную информацию из базы. Вообщем пока идёт тест на моей машине, завтра-послезавтра закину на сервер, тогда смогу сказать, есть польза от этого или нет :).
Думаю ещё освобождать промежуточные переменные, например получив отпечаток в переменную FINGERPRINT я его применяю, но больше, эту переменную ни как не использую. А в оперативке она висит у каждого потока.
Или после get-запроса содержание ответа получаю в переменную SAVED_CONTENT из которой получаю нужную информацию через регулярку, либо xpath. Но сама переменная тоже висит в оперативке.Возможно конечно я не прав, и BAS как то выгружает не используемые переменные из оперативки на винт например..
-
@sitiros said in Живая связь двух скриптов **BAS**:
@Fox мне тоже интересно, для оптимизации можно ли чистить\удалять переменные? есть ли в этом смысл?
если большие объемы инфы в переменке фигурируют то лучше высвобождать их, сам прикинь зачем ненужный объем памяти в ходе проекта таскать с собой, в одну накинул в другую накинул вот и оперативка кончилась, один поток забил раму например в 100 мб там второй поток еще 100 мб и т.д каждый себе кусок отъел, а если высбободил у первого потока второму эта часть достанется и т.д я как понимаю потоки в BASе работают асинхронно вне очереди. Я сильно особо не шарю в многопоточности, хз.
копипаст с зиновского мана
Нужно учесть один нюанс: расход процессора можно немного превысить, т.е. если у вас он загружен на 100% увеличение потоков на 10-15% практически ничего не изменит, а главное, не ухудшит. Просто потоки будут ждать некоторое время освобождения этих ресурсов.
Оперативная память, наоборот, не должна забиваться полностью, всегда лучше оставлять 10-30%. Если она кончится, это может привести к падению.ну это доводы, нужно точно узнавать у супарта, МБ BAS за нас все оптимизирует.
-
Уфф, 4 утра, а я так и не разобрался. Хотел поставить все точки над И, но не вышло. Вот АРХИВ.
В нём файл mails.txt, который надо в корень диска C:\ положить.
И три тестовых проекта, каждый из которых запускает 200 потоков, читает файл mails.txt в переменную.Первый проект сперва читает файл в переменную, потом обнуляет, присваивая переменной значение 0.
Второй сперва читает файл в переменную, потом удаляет командой delete VAR_FILE_CONTENT;
А третий читает
>>обнуляет>>читает>>удаляет.Я раз 10 запускал скрипты и мониторил загруженность оперативки. Дак каждый раз результат был разный.. То помогает обнуление освобождая память, то наоборот немного увеличивало занимаемый объём. С удалением точно так же. То освобождалась память, то нет..
Может я не корректно провожу тест?
-
-
@Fox said in Живая связь двух скриптов **BAS**:
@artihorror said in Живая связь двух скриптов **BAS**:
@Fox 8х2.5 Это в смысле восьмиядерный проц с частотой 2.5 гигагерца?
именно такой.
по обнулению переменных имеет смысл только если ложишь в нее что нибудь весом в несколько десятков мб. Пришлось раз обрабатывать басом текстовик весом 8гб, озу забивалась моментально и только обнуление спасало. А мелочь в сотню кб, даже если все 300 потоков не особо влияет. отпечаток весит 160 кб в среднем, выгружая его освободишь 45 мб рамы в 300 потоков.
Интересно как снизить нагрузку на процессор, какие действия нагружают его. Выше писали что обращение к файловой системе сильно влияет на процессор - отчасти так, но влияние мизер. Храню куки в текстовиках , при обращении нагрузка потока на проц с 0.1% повышается до 0.2% и то на мгновение. Но при загрузке страниц может нагрузить до 7-12% с пропуском кадров в 500. Фича по отключению скриптов и css, запрет загрузки картинок и еще пара плюшек как у зенки (не помню что еще там отключается у браузера) неплохо бы так улучшило производительность
80 потоков, запускаются с интервалом в 3 сек дабы распределить нагрузку. пики в момент начала загрузки страниц 40-45 потоков. при работе на странице нагрузка падает до 40-50%, при следующей загрузке страницы процессор снова потеет. -
Фича по отключению скриптов и css, запрет загрузки картинок и еще пара плюшек как у зенки (не помню что еще там отключается у браузера) неплохо бы так улучшило производительность
Дак в BAS'e это тоже есть. Экшен запретить запрос, и всё что угодно в нём запрещаешь, хочешь картинки, хочешь звуки, хочешь скрипты..

-
@artihorror На счёт -1 спасибо, не знал. А на счёт скриптов и css, попробуй *.css и *.js .
-
@Fox танцы с бубном вокруг запретов помогли снизить нагрузку на процессор до 3-3.7% вместо 7-12%
Для блокировки всех изображений хватает *img;
Из минусов: от копания в коде страницы убежать не удалось. *сss, *js блочат все под чистую и для отображения капч или важных всплывающих окон приходится искать и разрешать их запросы. Только для рекапчи их 4 - а это 4 экшена, в проекте появляются лишние действия и функции. -
@artihorror скоро будет возможность запрета нескодьких запросов в одном экшкне. На данный момент жля удобства читаемости, перекиньте все в отдельную функцию
-
@artihorror said in Живая связь двух скриптов **BAS**:
@Fox said in Живая связь двух скриптов **BAS**:
@artihorror said in Живая связь двух скриптов **BAS**:
@Fox 8х2.5 Это в смысле восьмиядерный проц с частотой 2.5 гигагерца?
именно такой.
по обнулению переменных имеет смысл только если ложишь в нее что нибудь весом в несколько десятков мб. Пришлось раз обрабатывать басом текстовик весом 8гб, озу забивалась моментально и только обнуление спасало. А мелочь в сотню кб, даже если все 300 потоков не особо влияет. отпечаток весит 160 кб в среднем, выгружая его освободишь 45 мб рамы в 300 потоков.
Интересно как снизить нагрузку на процессор, какие действия нагружают его. Выше писали что обращение к файловой системе сильно влияет на процессор - отчасти так, но влияние мизер. Храню куки в текстовиках , при обращении нагрузка потока на проц с 0.1% повышается до 0.2% и то на мгновение. Но при загрузке страниц может нагрузить до 7-12% с пропуском кадров в 500. Фича по отключению скриптов и css, запрет загрузки картинок и еще пара плюшек как у зенки (не помню что еще там отключается у браузера) неплохо бы так улучшило производительность
80 потоков, запускаются с интервалом в 3 сек дабы распределить нагрузку. пики в момент начала загрузки страниц 40-45 потоков. при работе на странице нагрузка падает до 40-50%, при следующей загрузке страницы процессор снова потеет.на проц более всего влияет вычислительные операции, регулярки, обшение между переменными, обработка кода в браузере, скриптов и т.п,в идеале нужно сводить на минимум операции в шабе иногда одна грамотно построяная операция, заменит 10 лишних движений.
Я уже давно отказался от комбайнов, клепаю по минимуму но много разных шаблонов ИМХО их и править удобнее. -
@Zenodrot said in Живая связь двух скриптов **BAS**:
перации в шабе иногда одна грамотно построяная операция, заменит 10 лишних движений.
Я уже давно отказался от комбайнов, клепаю по минимуму но много разных шаблонов ИМХО их и править удобнее.самая большая нагрузка на проц во время открытия браузера, поэтому рекомендуется при большом количестве потоков ставить паузы между запусками.
Например у меня на виртуалке с 2*2ггц одновременный запуск 7 потоков вешает машину, с паузой в 1 секунду между стартом открытия браузеров - 30-40 одновременно работающих потоков, дальше уже упор в память.По поводу памяти - с переходом на базу проблемы с памятью намного уменьшились, но есть нюанс. Если использовать базу как ресурс, то вся таблица будет храниться в памяти как и в случае с файлами, да и обновлять данные не удобно, так как потом приходится перегружать ресурс, что влияет на проц, да и на работу скрипта в целом.
Проблему решил, что в ресурс ложиться только колонка с моими id`шниками,
в скрипте я получаю этот id через парсить строку, вторым параметром там же получаю настоящий id в базе, потом просто через получить запись с фильтром по моему id получаю актуальные данные -
@DrPrime said in Живая связь двух скриптов **BAS**:
что хорошо, это то, что в памяти считывание и запись во много в раз быстрее чем с ХДД
что есть хороший прирост к производительности, главное ее сильно объемами инфы не грузить ну тут уже подгонять все под железо ибо кто то на 2 гигах сидит а кто то на 64 + -



