У меня был очень похожий опыт, но я остановился на другом решении.
Я тоже тестировал скрипт на 8 ядерном 32 гб дедике с широким каналом и там еле еле 10 потоков шло.
Работающими решением оказалось взять 32 ядерный локальный сервер с 64 оперативки, на не очень быстром канале, с сокс5, на нем 100+ потоков запускалось.
Скрипт тот же, никаких оптимизаций не делалось.
Стоит конечно побольше, чем аренда дедика но тут уж зависит от окупаемости твоей темы, стоит ли оно того или нет.
Но соксы могут быть узким местом, по возможности нужно делать свои соксы. Для этого, можно брать дешевые VPS и установить сокс через опенсурсный софт microsocks для линукса (в инете полно инструкций по установке, занимает не более 5 минут вручную, и можно установку через БАС автоматизировать также на случай если нужны сотни соксов).
Возможно ли узнать номер потока асинхронной функции по ID потока?
-
Изначально глобалня переменная у меня - 0
Потоки стартовали. У каждого потка проверка глобальной переменной идет:
если 0 - можна резервировать свой поток под действия.
И так один первий поток резервирует себя под действия заменяю глобалную переменную на свой номер потока, роботает скоко надо. Потом меняет глобальную переменную опять на 0, давая другим возможность себя зарезервировать и завершает свою роботу. А что если он не успеет добратса до последнего изминения переменной на 0 изза ошыбки? Тогда другии потоки никогда не начнут виполнять действия. Заварачивания функции в игнор не поможет - так как ошыбка может произойти в потоке что не виполняэт действия - обнулить глобальную переменную., таким образом может запустить под действия более двох потоков одноврименно. Поетому если другая асинхронная фунция будеть проверять на сравнения номер глобальной переменной и той функции, что себя зарезервировала, то если она не роботает то сам обнулить глобальную перем. Но вопрос как узнать ID потока по номеру потока?