Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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#线程,GetAvailableThreads()_C#_Multithreading - Fatal编程技术网

C#线程,GetAvailableThreads()

C#线程,GetAvailableThreads(),c#,multithreading,C#,Multithreading,我有一个线程问题 我正在将ThreadPool.SetMaxThreads(maxThreads,System.Environment.ProcessorCount)设置为10 但是当我检查有多少线程是可用的ThreadPool.GetAvailableThreads()时,它说有(maxThreads-1)那么9个线程,但随后继续使用10个线程 你知道为什么吗 感谢您的帮助。在理想情况下,我们将有一个线程/物理内核。这样,我们就不再有上下文切换,这是一种成本相当高的操作。但在我们拥有数百核处理

我有一个线程问题

我正在将
ThreadPool.SetMaxThreads(maxThreads,System.Environment.ProcessorCount)
设置为10

但是当我检查有多少线程是可用的
ThreadPool.GetAvailableThreads()
时,它说有(maxThreads-1)那么9个线程,但随后继续使用10个线程

你知道为什么吗


感谢您的帮助。

在理想情况下,我们将有一个线程/物理内核。这样,我们就不再有上下文切换,这是一种成本相当高的操作。但在我们拥有数百核处理器之前,这是不现实的


不管怎样,正如Marc所建议的,除非您真的知道自己在做什么,否则不应该弄乱线程池参数。线程池的.Net实现背后的逻辑相当不错,它可以成功地处理大多数场景

您是否正在使用类似的方法对线程进行排队

ThreadPool.QueueUserWorkItem(callback, obj)
然后做一些类似的事情:

WaitHandle.WaitAll(WaitHandle)

我的猜测是,实际计算正在运行的线程的方式存在问题,但没有更具体的说明,这只是猜测。

一个线程池线程正在监视线程池中其他线程的等待操作。这应该可以解释maxthreads-1的结果


我不知道为什么它会出现使用所有10线程然后。这可能是你用9来做你的工作,用1来监视和排队。

这是你在过去30分钟内第三次问这个问题。我不知道这个问题的答案,但你说这会导致什么“问题”?你真的不应该弄乱这些数字。。。如果您想要一个受限制的池,您应该编写自己的池(或者等到.NET 4.0到来,因为CCR/TPL包含这样的…)。potser没有提到的是,他们只在测试运行程序主机进程中运行时才看到这种行为:这是我第二次问这个问题,因为您决定关闭另一个。这是一个不同的问题!我想你看到的是一个没有问题的地方。正如马克指出的,“你不应该真的弄乱这些数字”