Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制每个类的线程数_C#_.net_Multithreading_Threadpool - Fatal编程技术网

C# 限制每个类的线程数

C# 限制每个类的线程数,c#,.net,multithreading,threadpool,C#,.net,Multithreading,Threadpool,我有一个.NET web应用程序,它为每个请求从一组多个api向其中一个api发送请求(命中哪个api取决于请求类型),获取响应,处理它并返回响应 假设在任何给定的时间点,假设我们最多有100个线程,我们得到100个请求(假设每个线程处理一个请求),请求需要转到API-1,API-1的响应时间突然增加,然后我们得到后续的请求,这些请求需要转到API-2,3。。。n并且所有这些API都工作得很好。只有当其中一个线程摆脱了对API-1的处理,从而对.NET web应用程序的总体性能产生影响时,才会

我有一个.NET web应用程序,它为每个请求从一组多个api向其中一个api发送请求(命中哪个api取决于请求类型),获取响应,处理它并返回响应

假设在任何给定的时间点,假设我们最多有
100个线程
,我们得到
100个请求
(假设每个线程处理一个请求),请求需要转到
API-1
,API-1的响应时间突然增加,然后我们得到后续的请求,这些请求需要转到
API-2,3。。。n
并且所有这些API都工作得很好。只有当其中一个线程摆脱了对API-1的处理,从而对.NET web应用程序的总体性能产生影响时,才会满足对这些API的请求

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

如果我有n个类和100个线程,我应该能够将它们划分为每个100/n的线程池


我尝试了一个线程池,但没有达到我想要的效果。

可能您的应用程序是异步编程模型的一个很好的目标,如果使用正确,可以消除阻塞线程停机问题

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

  • 关于堆栈溢出的讨论
  • Microsoft文档页面
  • 斯蒂芬·克利里的文章和他的博客
  • 关于堆栈溢出的讨论

如果确实需要,仍然可以像往常一样限制线程池线程(工作线程)的数量。请参阅StackOverflow的讨论。

您如何创建这些线程本身?API-i是否主要执行CPU绑定或i/O绑定的工作?@目前,将其交给IIS处理。这是异步i/O和的主要情况。每个传入请求只需要1个线程,ASP.NET会处理该请求。如果您使用异步并等待外部I/O,则不会有影响性能的API-1上等待的“阻塞线程”。请出示一些代码。很少有人能比系统管理线程或线程优先级做得更好。对asymc来说,是的,对乱搞线程池来说不是。@HenkHolterman你能详细说明线程池工作人员的限制吗?你应该对那些设置感到厌倦,当然是在ASP.NET应用程序中。ASP.NET做了大量的线程管理,不要碍事。限制线程池线程数量的原因是什么?由于每个任务都可以安排在任何空闲线程上,因此保持默认的线程数通常可以获得最佳性能。@FCin原因之一可能是为了平衡性能/地址空间和内存消耗。默认情况下,它是有限的。见Jon Skeet的答案。