我有一个 .NET web 应用程序,它针对每个请求从一组多个 API 向其中一个 api 发送请求(要命中哪个 api 取决于请求类型),获取响应,处理它并返回响应.
假设在任何给定的时间点,假设我们最多有 100 个线程
,我们得到 100 个请求
(假设每个线程分别处理一个请求) 请求需要转到 API-1
并且 API-1 的响应时间突然增加,然后我们得到后续请求需要转到 API-2,3 ... n
并且所有这些 API 都运行良好。在一个线程从处理 API-1
中解放出来之前,不会提供对这些 API 的请求,这会导致.NET Web 应用程序的整体性能影响。
我想要实现的是,我想限制每个 API 的线程数(假设我们为每个 api 都有一个具有某些方法的类),这样每个类都不会超过分配给它的最大线程数.
(如果我有 n 个类和 100 个线程,我应该可以将它们分成每个 100/n 个线程池)
我尝试了 few links对于线程池,但无法达到我想要的效果。
最佳答案
您的应用程序可能是异步编程模型的良好目标,如果使用得当,可以消除阻塞线程停机问题。
C# 中的异步编程是一个广泛讨论的话题。检查以下资源:
- What is the difference between asynchronous programming and multithreading?关于 StackOverflow 的讨论
- Asynchronous programming Microsoft Docs 上的页面
- Async and Await Stephen Cleary 的文章和他的博客概况
- What do the terms “CPU bound” and “I/O bound” mean?关于 StackOverflow 的讨论
如果确实需要,您仍然可以像往常一样限制 ThreadPool 线程( worker )的数量。参见 Using TPL how do I set a max threadpool size关于 StackOverflow 的讨论。
关于c# - 限制每个类的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914414/