日期:2014-05-17  浏览次数:20710 次

关于ThreadPool纠正一下很多人的看法!
本帖最后由 wq_quake 于 2013-02-17 21:26:42 编辑
这是一个网友的问题

1.线程池在首次创建 ThreadPool 类的实例时被创建。
线程池具有每个可用处理器 25 个线程的默认限制。
2.bool bSetMaxThread = ThreadPool.SetMaxThreads(200, 500);
这两句话是否有矛盾,请帮忙解答下原因。

下面是回答!

iyomumx
iyomumx
等级:
线程池具有每个可用处理器 25 个线程的默认限制。

sp1234
龚琳娜的舞蹈比较恶心
在.net4.0以后,这个数量已经不是25了,而是1000多。说它“默认25个线程”是老皇历了。

以下是我这几天调试程序得到的结论!这个25确实是最大值!是系统使用的线程最大值!那很多人问了那个SetMaxThread干什么的,其实这个函数名起的有迷惑性,不准确!那个实际是线程队列的长队,25其实就是个卖票的窗口,MaxThread是买票大厅里能能容纳多少人!而这25个呢又不是都开,平时也就10个左右,所以说25其实是并发线程能力,Max..没什么太具体的含义,其实你设10,你开100个也没问题!那90个人也能进来等着!在哪里都是等!
Thread Threadpool c# .net

------解决方案--------------------
验证方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.SetMaxThreads(100, 100);
            for (int i = 0; i < 50; i++)
                ThreadPool.QueueUserWorkItem(x => { while (true) { /* Console.WriteLine(x); */ Thread.Sleep(10); } }, i);
            Thread.Sleep(60000);

        }
    }
}


在Windows XP+.NET 4.0 Profile+C# 4.0下,打开任务管理器,运行,等一会,看线程数,可以看到明显超过25个。把100修改成10,只增加了11个就停止了。