我有一个.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,但无法达到我想要的效果。
答案 0 :(得分:1)
对于异步编程模型,您的应用程序可能是一个很好的目标,如果使用得当,可以消除阻塞的线程停机问题。
C#中的异步编程是一个非常广泛的主题,已经讨论了很多。检查以下资源:
如果你真的需要,你仍然可以像往常一样限制ThreadPool线程(工作者)的数量。请参阅有关StackOverflow的Using TPL how do I set a max threadpool size讨论。