每个 Class 限制线程数

Limiting threads per Class

我有一个 .NET Web 应用程序,它针对每个请求将请求发送到一组多个 API 中的一个 api(要命中哪个 api 取决于在请求类型上),获取响应,处理它并 returns 响应。

假设在任何给定的时间点,假设我们有最大值 100 threads,我们得到 100 requests(假设每个线程分别处理一个请求)请求需要转到 API-1 突然 API-1 的响应时间增加,然后我们收到需要转到 API-2,3 ... n 的后续请求,所有这些 API(s) 都在工作perfectly.Requests 这些 API(s) 将不会被提供,直到一个线程从处理中解放出来 API-1,这会对 .NET Web 应用程序的整体性能产生影响。

我想要实现的是我想限制每个 API 的线程数(假设我们有一个 class 每个 api 有一些方法)这样每个 class 不超过分配给它的最大线程数。

(如果我有 n classes 和 100 个线程,我应该能够将它们分成每个 100/n 的线程池)

我尝试了 few links 线程池,但无法达到我想要的效果。

您的应用程序可能是异步编程模型的良好目标,如果使用得当,可以消除阻塞线程停机问题。

C# 中的异步编程是一个非常广泛的话题,已被广泛讨论。检查以下资源:

  • 关于 Whosebug 的讨论
  • Asynchronous programming Microsoft 文档页面
  • Async and Await Stephen Cleary 的文章和他的博客
  • What do the terms “CPU bound” and “I/O bound” mean? 关于 Whosebug 的讨论

如果确实需要,您仍然可以像往常一样限制 ThreadPool 线程(工作者)的数量。请参阅 Using TPL how do I set a max threadpool size 关于 Whosebug 的讨论。