Медленно фильтрует / Обновляет / Конвертирует базы - Быстродействие в многопоточных операциях

Управление настройками производительности в многопоточных операциях рассмотрим на примере комплексного многопоточного фильтра. По умолчанию фильтр работает на минимальных настройках производительности, что обеспечивает скорость обработки до 10 аккаунтов в секунду - зависит от значения в поле "Коэффициент умножения" в главных настройках программы. Но даже при такой небольшой производительности задача будет часто уходить в режим ожидания. Такие ограничения вызваны тем, что Instagram блокирует IP-адрес на короткое время, если с него идёт слишком много запросов за определенный интервал времени.

Экспериментальным путём было установлено, что избежать кратковременных блокировок IP-адреса при долгосрочной работе можно, если число запросов будет равно примерно одному в секунду. Однако, Instagram "понимает" и принимает всплески активности и потому с одного IP-адреса можно без санкций отправить за секунду до 220 запросов, но следующие уже приведут к сообщению об ошибке - Instagram предложит повторить запрос позже.



▼ ПЕРЕЙТИ К ВЫВОДАМ ▼


КРАТКОЕ ОПИСАНИЕ НАСТРОЕК

Таким образом, если требуется отфильтровать небольшую базу, скажем, до 1000 профилей то можно обойтись и вовсе без прокси, установив в поле "Коэффициент умножения" значение 20, как показано на скриншоте ниже.


Блок "Нагрузка на систему" в общих настройках программы.


Чтобы существенно увеличить производительность фильтра и других задач, направленных на обработку больших списков с Instagram-аккаунтами, потребуется задействовать прокси формата HTTP(S) и/или SOCKS4/5 IPv4 или IPv6 из /48 или /32, но не из /64 (ниже объясняетя почему). При этом, если список прокси содержит менее 100 прокси включительно, то мы не рекомендуем ставить коэффициент умножения более 1. Для числа прокси более 200 в этом уже будет мало смысла, т.к. предельный лимит на число потоков в потоковом блоке равен 400. Соответственно, при коэффициенте умножения более 1го какие-то прокси начнут простаивать, а какие-то выполнять больше работы и, возможно, уходить из-за этого в режим ожидания - об этих алгоритмах более подробно также читайте ниже.


Список прокси можно указать в глобальных настройках программы, как показано на скриншоте ниже.


Задание глобального списка прокси в главном окне программы.


Или загрузить в окне фильтра независимо, воспользовавшись кнопкой "Задать прокси вручную", как показано ниже.


Задание прокси вручную в окне комплексного многопоточного фильтра.


Если вы хотите задавать прокси независимо каждый раз перед фильтрацией, то в окне фильтра нужно нажать кнопку "Конструктор прокси", как показано на скриншоте выше. После чего откроется диалог, как показано на скриншоте ниже.


Окно конструктора прокси.

В открывшемся окне конструктора нужно выбрать текстовый файл, где указан перечень прокси-серверов. Формат прокси с текстовом файле должен соответствовать структуре <IP>:<PORT> или <IP>:<PORT>:<LOGIN>:<PASSWORD>, или <IP>:<PORT>:<LOGIN>:<PASSWORD>:<TYPE> в зависимости от настроек. Например:


146.185.202.148:1080

91.190.127.53:1080

...и так далее


Если прокси в текстовом файле заданы в формате <IP>:<PORT>, то в полях "Логин" и "Пароль" необходимо ввести логин и пароль для доступа ко всем прокси-серверам, если это требуется, а также выбрать тип загружаемых прокси.  В противном случае нужно установить отметку в поле "Логин и пароль из списка", а также в поле "Тип прокси из списка", если текстовый файл помимо самого прокси, логина и пароля подключения содержит также тип (HTTP(S) / SOCKS4/5).  После этого следует нажать кнопку "Проверить". SocialKit добавит в перечень только те прокси-сервера, с которыми удалось установить связь.


Также комплексный многопоточный фильтр и другие многопоточные операции могут использовать список прокси-серверов из главных настроек программы, как было сказано выше. Это существенно облегчает работу, т.к. можно не задавать одни и те же прокси каждый раз повторно. Для этого Вам достаточно один раз выбрать список прокси соответствующего типа, ввести логин и пароль, если для подключения к прокси требуется авторизация или установить флаг "Логин и пароль из списка в формате ID:PORT:LOGIN:PASSWORD", если каждый прокси имеет свой логин и пароль для авторизации (см. скриншот выше).


Список со вспомогательными прокси может быть задан опционально аналогичным образом, что и список основных прокси. Суть вспомогательных прокси в том, чтобы помогать основным, когда все прокси из основного списка получают временную блокировку за превышение числа запросов в единицу времени. Instagram с недавнего времени научился блокировать не только конкретные IP-адреса, но и подсети. Особенно остро это касается IPv6-прокси из /64 подсетей. Такие прокси стоят очень дешево и их легко можно "поднять" самому, но эффективность их будет достаточно низкой как раз из-за таких "кластерных блокировок". Если задано два списка прокси (основной и вспомогательный), то при обнаружении блокировки на том или ином IP (прокси) из основого прокси программа будет брать по очереди IP (прокси) из вспомогательного списка прокси. При грамотном подходе это позволит снизить время простоя при работе с разными группами IPv6 из /64.


Проверять прокси из главных настроек не обязательно. Данная функция реализована в качестве дополнительного функционала, позволяющего использовать SocialKit как инструмент тестирования прокси различных типов. Если вы всё же сформировали список проверенных прокси, то все многопоточные операции будут использовать не входной список прокси из файла, а прокси из списка проверенных со статусом "Valid".


Если вы планируете использовать медленные прокси-сервера, то лучше установить в главных настройках программы переключатель "Качество связи" на "Среднее" или "Низкое". Это укажет программе на то, что нужно давать прокси больше времени для получения информации от Instagram.


Если список содержит качественные прокси-сервера, поддерживающие работу в несколько потоков, то вы можете также поднять скорость переключателями "Нагрузка на систему" и изменяя "Коэффициент умножения". Однако, помните при этом, что Instagram лимитирует число запросов в единицу времени с одного IP (прокси), о чём было сказано выше.


Коэффициент умножения устанавливает лимит на количество потоков для каждого используемого прокси из загруженного списка, а переключатель "Нагрузка на систему" лимитирует общее число потоков в потоковом блоке программным образом:


- "Минимальная" позволяет работать не более, чем в 50 потоков;

- "Средняя" позволяет работать не более, чем в 100 потоков;

- "Высокая" позволяет работать не более, чем в 200 потоков;

- "Максимальная" позволяет работать не более, чем в 400 потоков;


Итоговая формула расчёта производительности выглядит так:


PCnt * Kf = Limit(Limit(ThrCnt, HLimit), Ap)


где:


PCnt - количество прокси в выбранном списке;

Kf - коэффициент умножения;

ThrCnt - произведение PCnt и Kf;

HLimit - положение переключателя "Нагрузка на систему";

Ap - число логических ядер процессора;

Limit(ThrCnt, HLimit) - предельно допустимая скорость в соответствии с выбранной нагрузкой на систему;
Limit(Limit(ThrCnt, HLimit), Ap) - предельно допустимая скорость в соответствии с выбранной нагрузкой на систему, лимитированная аппаратными возможностями ПК (числом логических ядер).

ВАЖНО! Если один или несколько прокси, участвующие в различных многопоточных операциях (например, фильтр, обновление дополнительной информации, конвертация), используются в продвижении аккаунтов, то есть вероятность получения временной блокировки для такого прокси, что может быть чревато остановкой заданий или пропуском аккаунтов при многопоточных операциях. Рекомендуем не использовать один и тот же прокси или группу прокси для задач на продвижение (подписка, расстановка лайков и т.п.) и для многопоточных операций одновременно..


Учтите также, что на максимальных настройках производительности SocialKit способен полностью загрузить работой все логические и физические ядра процессора, что может сказаться на скорости работы других приложений. SocialKit - единственная программа среди аналогов, которая сама распределяет задачи между ядрами процессора, что позволяет добиться высочайших показателей производительности.


Ниже показан пример, как распределяется работа по 8 логическим ядрам мощного процессора Intel Core i7, что позволяет вплотную приблизиться к скорости фильтрации в 400 аккаунтов в секунду.



Нагрузка на ЦП во время работы комплексного многопоточного фильтра в режиме максимальной производительности.

Приблизительно такую же эффективность работы фильтра можно получить и на 4 логических ядрах при прочих равных условиях. Однако, программе придется делать нагрузку на каждое ядро в два раза большую, чем при 8 логических ядрах. В первом случае каждое логическое ядро получит 100 потоков на обработку из одного потокового блока из 400 потоков, а во втором - 50 потоков, что является, несомненно, более оптимальным способом нагрузки и может несколько увеличить производительность работы фильтра в целом, но не радикальным образом. Куда большее значение будет иметь производительность используемых прокси.


ВАЖНО! Скорость в формулировке "до <значение>" говорит лишь о том, какую максимальную производительность возможно получить с технической точки зрения. Следует понимать, что при использовании прокси на общую производительность влияет скорость ответа прокси-сервера вашему провайдеру Интернет-услуг, скорость ответа серверов Instagram прокси-серверу и целый ряд других внешних факторов, на которые программа не способна повлиять.


ВЫВОДЫ

ВАЖНО! Таким образом, исходя из вышеописанного, можно сделать вывод, что:

I). Для получения максимальной производительности число логических ядер должно быть больше либо равно 4.
II). Для фильтрации лучше всего использовать IPv6 из /48. Такими прокси торгует компания SocProxy.

III). Коэффициент умножения в большинстве случаев лучше оставлять равным единице, а производительность увеличивать через покупку дополнительных прокси. Иными словами, число прокси - это основной ускоряющий фактор.

Сервис поддержки клиентов работает на платформе UserEcho