Re[6]: Как оптимизировать выполнения 10000 параллельных зада
От: LWhisper  
Дата: 05.08.16 13:40
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>В асинхронном программировании все основано на событии и разбиении метода на участки которые выполняются по сигналу выполнения задачи используя конечный автомат.

S>Задача повисшая на локе await завершает свою работу в потоке и продолжит работу когда задача на await завершится. За этим следит планировщик.
S> У тебя будет куча задач висящих на await , но количество используемых потоков будет равно реально работающим.



Так в том то и дело, что изначально 10000 соединений никто не отменял.
Они порождают 10000 тасок. Эти 10000 тасок порождают 10000 потоков. Эти потоки повисают на якобы асинхронном локе. Поток не может вернуться волшебным образом в пул или переключиться на выполнение другой задачи. Он будет висеть до посинения. Единственное, что я могу сделать — это вручную нагрузить его полезной работой. Фактически, async просто предоставляет удобный интерфейс для формирования APC очереди. Просто помимо проблемы 10000 потоков, я получаю довеском проблему исчерпания пула потоков.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.