Re: Как оптимизировать выполнения 10000 параллельных задач?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.07.16 11:24
Оценка: +1
Здравствуйте, LWhisper, Вы писали:

LW>Всем привет.


LW>В настоящий момент я запускаю на выполнение 10000 параллельных задач посредством new Thread(...).Start().

LW>Вначале они дерутся за процессорное время, но вскоре повисают на ожидании чего-либо — блокировок, ответа от сокета, просто в Thread.Sleep

LW>Существуют ли какие-либо рекомендации по оптимизации подобных сценариев? Исходим из того, что реально одновременно выполняться может не больше 128 потоков, остальное время мы вынуждены гонять контекст между ними. Но из-за вышеупомянутых задержек, 10000 потоков с постоянным переключением контекста, работают быстрее, нежели 128, которые большую часть времени жизни спят.


Конечно существуют. Основная рекомендация — не создавать потоки. Вообще забудь про thread.start. Забудь что у тебя есть потоки.
Используй асинхронный код, он сам заустит продолжение где надо и не будет заниматься фигней, при этом не съест потоков больше, чем в thread pool.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.