Информация об изменениях

Сообщение Re[7]: Как оптимизировать выполнения 10000 параллельных зада от 05.08.2016 17:05

Изменено 05.08.2016 17:23 Serginio1

Здравствуйте, LWhisper, Вы писали:

LW>Здравствуйте, Serginio1, Вы писали:


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

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

LW>Image: HcTflRn.png


LW>Так в том то и дело, что изначально 10000 соединений никто не отменял.

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

А чем поток внутри занимается?
Если он, что то ожидает то твой то нужно заменить все синхронные операции на асинхронные.
Thread.Sleep заменяется на await Task.Delay().
Re[7]: Как оптимизировать выполнения 10000 параллельных зада
Здравствуйте, LWhisper, Вы писали:

LW>Так в том то и дело, что изначально 10000 соединений никто не отменял.

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

А чем поток внутри занимается? Какова нагрузка на процессор?
Если он, что то ожидает то твой то нужно заменить все синхронные операции на асинхронные.
Thread.Sleep заменяется на await Task.Delay().