C # ожидающий поток потребления процессора для веб-службы - PullRequest
1 голос
/ 24 сентября 2019

У меня есть веб-сервис, который я пытаюсь сократить время ответа на один веб-запрос.У меня много вызовов внешних сервисов во время жизни одного запроса к моему сервису, и я нашел решение, написав простую библиотеку графов, которая выполняет задачи на графике, который можно настроить снаружи для параллельной работы в соответствии с зависимостью между задачами.

Something like that

Я использую TPL для запуска задач в разных потоках, и у меня есть некоторые опасения по поводу моего ожидающего (и будет продолжать выполнение после выполнения графика) потока.

Я прочитал несколько замечательных статей о том, как работает неблокирующий ввод / вывод, но у меня есть черные точки.Я знаю, что было бы лучше, если бы у меня не было основного потока, ожидающего во время выполнения запроса, потому что, например, если мой пул потоков имеет 100 потоков и все эти потоки используются в определенный момент времени, то это сбой, моя служба не можетответ на следующий запрос.Это не масштабируемо.

Я могу увеличить номер потока в пулах потоков и выполнить эту ошибку, но когда я читаю, наличие большего количества потоков может привести к большему использованию памяти (у каждого потока есть свой собственный стек, я в порядкетот момент, что у меня достаточно памяти, например) и больше потребления процессора (переключение контекста?).Это то, что я совсем не понимаю.

Я знаю, что процессор не тратит время простоя на потоки, которые находятся в состоянии ожидания.Поэтому я думаю, что мой основной поток не будет потреблять процессор в этот момент?.

Итак, мой вопрос: что плохого в моем дизайне?Если ожидающие потоки не потребляют ЦП, что плохого в том, что в состоянии ожидания еще несколько потоков о ЦП? Еще несколько потоков?

Что-то, что ядро ​​проверяет эти потоки на коммутаторе, если его состояние изменилось на «готово к выполнению»?Если это так, то действительно ли это большое дело, о котором я должен позаботиться?Если это не так, не могли бы вы объяснить мне преимущества меньшего количества потоков, ожидающих ЦП?

Один из наиболее удовлетворенных ответов для меня здесь; Потребление ресурсов ожидающими потоками , говоря, что:

Процессор - это то, что изменится в зависимости от активности потока и количества запрошенных потоков (помните, поток также потребляет ресурсы ядра, таким образомдолжен управляться на уровне ядра, поэтому чем больше потоков нужно обработать, тем больше времени ядра должно быть потрачено на их управление).

Но я также не совсем ясно понимаю эту часть.Не могли бы вы объяснить, как я не знаю, как ядро ​​или процессор обрабатывает потоки.

...