【发布时间】:2018-04-19 06:47:03
【问题描述】:
我有一个 .NET Web 应用程序,它为每个请求从一组多个 API 发送请求到其中一个 API(命中哪个 api 取决于请求类型),获取响应,处理它并返回响应.
假设在任何给定时间点,假设我们最多有100 threads,我们得到100 requests(假设每个线程都在处理一个请求),其请求需要转到API-1突然 API-1 的响应时间增加了,然后我们收到需要转到 API-2,3 ... n 的后续请求,所有这些 API 都可以正常工作。这些 API 的请求要等到一个线程才会被处理免于处理API-1,这会对 .NET Web 应用程序的整体性能产生影响。
我想要实现的是我想限制每个 API 的线程数(假设我们为每个具有一些方法的 api 有一个类),以便每个类不超过分配给它的最大线程数.
(如果我有 n 个类和 100 个线程,我应该能够将它们分成每个 100/n 个线程池)
我为线程池尝试了few links,但无法达到我想要的效果。
【问题讨论】:
-
你是如何创建这些线程本身的?
-
API-i主要执行 CPU 密集型或 I/O 密集型工作吗? -
@TheGeneral 现在,让 IIS 来处理它。尚未在应用程序级别完成
-
这是异步 I/O 和 using HttpClient right 的主要情况。每个传入请求应该只需要 1 个线程,而 ASP.NET 会处理它。
-
如果您正在使用异步并且正在等待外部 I/O,则不会在 API-1 上等待影响性能的“阻塞线程”。请显示一些代码。很少有人能比系统管理线程或线程优先级做得更好。
标签: c# .net multithreading threadpool