我试图了解ThreadPool的功能,我有一个.NET示例:
class Program
{
static void Main()
{
int c = 2;
// Use AutoResetEvent for thread management
AutoResetEvent[] arr = new AutoResetEvent[50];
for (int i = 0; i < arr.Length; ++i)
{
arr[i] = new AutoResetEvent(false);
}
// Set the number of minimum threads
ThreadPool.SetMinThreads(c, 4);
// Enqueue 50 work items that run the code in this delegate function
for (int i = 0; i < arr.Length; i++)
{
ThreadPool.QueueUserWorkItem(delegate(object o)
{
Thread.Sleep(100);
arr[(int)o].Set(); // Signals completion
}, i);
}
// Wait for all tasks to complete
WaitHandle.WaitAll(arr);
}
}
是否以2(int c)为一组运行50个“任务”,直到全部完成?或者我不了解它的真正作用.
解决方法:
通过设置最小线程数,您要求.NET运行时唯一要做的就是为线程池分配至少2个线程.您并不是在要求它将自身限制为2.
因此,不能保证您的程序将为此特别使用多少个线程.这取决于您的系统和许多其他因素.
我做了一个简单的测试(对程序进行了微小的更改,以跟踪进入睡眠调用的并发线程)在一次运行中达到4,在另一次运行中为3,在另一次运行中为7,在另一次运行中为10,等等.
您确实不需要更改线程池大小.
你想达到什么目的?