C# CLR最大I/O(端口完成)线程确定

C# CLR最大I/O(端口完成)线程确定,c#,.net,multithreading,C#,.net,Multithreading,我一直在做一些关于I/O线程的研究,但对于系统如何确定限制,我有点困惑 根据报告: 如果指定负数或大于活动线程池线程的最大数量(使用GetMaxThreads获得),SetMinThreads将返回false,并且不会更改任何最小值 当我打电话时: //Max IO Threads is 1000 //max Works is set to 32767 ThreadPool.GetMaxThreads(out var maxWorker, out var maxIO); 系统如何确定我只能有1

我一直在做一些关于I/O线程的研究,但对于系统如何确定限制,我有点困惑

根据报告:

如果指定负数或大于活动线程池线程的最大数量(使用GetMaxThreads获得),SetMinThreads将返回false,并且不会更改任何最小值

当我打电话时:

//Max IO Threads is 1000
//max Works is set to 32767
ThreadPool.GetMaxThreads(out var maxWorker, out var maxIO);
系统如何确定我只能有1000个I/O线程,是否有必要增加该限制


如文档所述,设置大于最大值的数值将无效

MSDN只是告诉您,
SetMinThread
不能与大于当前最大线程数的值一起使用。但是可以通过调用
SetMaxThread
更改该号码:

ThreadPool.GetMaxThreads(out var worker, out var io);
Console.WriteLine(io); // 1000

ThreadPool.SetMaxThreads(worker, 32000);
ThreadPool.GetMaxThreads(out worker, out io);
Console.WriteLine(io); // 32000

唯一强制执行的限制是32767。您不能设置更多的线程。

1000个I/O线程似乎太多了。你为什么想要更多?请看@Kredns我同意这是很多,我们正在做一些负载测试。我们有很多可能是异步实现的,但事实并非如此。@Teomanshipahi感谢您的链接,但这似乎只适用于工作线程,我的问题是PortCompletionThreads。您可以使用
ThreadPool.SetMaxThreads
中的第二个参数来增加完成端口线程。例如
ThreadPool.SetMaxThreads(numWorkerThreads,numCompletionPortThreads)
。不过,我不确定系统是如何确定1000的。谢谢,我刚刚在你发布这篇文章时发现了这一点。