У меня был очень похожий опыт, но я остановился на другом решении.
Я тоже тестировал скрипт на 8 ядерном 32 гб дедике с широким каналом и там еле еле 10 потоков шло.
Работающими решением оказалось взять 32 ядерный локальный сервер с 64 оперативки, на не очень быстром канале, с сокс5, на нем 100+ потоков запускалось.
Скрипт тот же, никаких оптимизаций не делалось.
Стоит конечно побольше, чем аренда дедика но тут уж зависит от окупаемости твоей темы, стоит ли оно того или нет.
Но соксы могут быть узким местом, по возможности нужно делать свои соксы. Для этого, можно брать дешевые VPS и установить сокс через опенсурсный софт microsocks для линукса (в инете полно инструкций по установке, занимает не более 5 минут вручную, и можно установку через БАС автоматизировать также на случай если нужны сотни соксов).
Единоразовое действие по завершению всех потоков.
-
Скрипт в несколько потоков собирает данные, затем эти данные копируются в корень диска и выполняются выборочные действия по завершению, типа открыть папку, проиграть звук.. Проблема в том, что каждый поток выполняет эти выборочные действия по новой. Несколько раз открывает папку и проигрывает звук. Проблема ещё в том, что команда копировать папку не заменяет файлы, то есть последние потоки тупо не сохраняют добытую информацию.. Может есть команда для действия по завершению всех потоков?
Пока попробую через ресурс.. -
Сделал через глобальную переменную. В OnApplicationStart присвоил значение 1. А в каждом потоке, в конце операции сделал, Читать из глобальной переменной в переменную GLOBAL_VARIABLE_RESULT, увеличить на 1 эту переменную, присвоить значение GLOBAL_VARIABLE_RESULT - глобальной переменной. А в конце скрипта добавил IF с значением [[GLOBAL_VARIABLE_RESULT]] == 32.