Web服务的C#等待线程CPU消耗

时间:2019-09-23 23:42:44

标签: c# multithreading task task-parallel-library cpu

我有一个Web服务,试图缩短Web请求的单个响应时间。 在对我的服务的单个请求的生命周期中,我有很多外部服务调用,并且通过编写一个简单的图形库来找到解决方案, 在图形上执行任务,该图形可以根据任务之间的依赖性在外部配置为并行运行。

Something like that

我正在使用TPL在不同的线程上运行任务,我对等待有一些担忧 (并且将在执行图形时继续执行)。

我读了一些很棒的文章,它们介绍了非阻塞I / O的工作原理,但是有一些黑点。 我知道如果在执行请求期间没有主线程等待会更好,因为例如,如果我的线程池有 100个线程,并且所有这些线程在某个时间点正在使用,这是一个故障,我的服务无法响应下一个请求。那是不可扩展的。

我可以增加线程池的线程数,并且可以完成该失败,但是如我所读,具有更多线程 可能会导致更多的内存使用(每个线程都有自己的堆栈,例如,我可以确定自己有足够的内存) 以及更多的CPU消耗(上下文切换?)。这是我根本不了解的。

我知道CPU不会在等待状态的线程上花费空闲时间。 所以我认为我的主线程此时不会消耗CPU吗?。

所以我的问题是什么对我的设计不利?如果等待线程不占用CPU, 在有关CPU的等待状态下有更多线程是怎么回事?

如果状态更改为“准备执行”,内核会在交换机上检查这些线程吗?如果是,这真的是 我应该照顾很多?如果不是,您能否请我解释一下减少等待CPU线程的好处?

对我来说,最满意的答案之一是在这里; Waiting Threads Resource Consumption 说:

  

CPU将根据线程活动和线程的变化而变化   请求的线程数(请记住,线程也消耗内核   资源,因此必须在内核级别进行管理,因此   必须处理的线程,必须消耗更多的内核时间   进行管理)。

但是我也不清楚这部分。您能否解释一下,就像我不了解内核或cpu如何处理线程那样。

0 个答案:

没有答案