日期:2014-05-16 浏览次数:21234 次
每次创建一个线程,都会花费几百微秒级别的时间来创建一个私有的局部栈,每个线程默认使用1M的内存。这个可以在使用Thread类的构造函数时设置:
new Thread(new ThreadStart(Go), 2);
new Thread(new ParameterizedThreadStart(Go("hello")), 3);提供的两种构造函数方式都提供了对应的设置线程局部栈的大小。线程池通过共享和回收线程的方式来分配这些内存,这样可以使多线程运行在一个非常细粒度级别上而不影响性能。这对于充分利用多核处理器,使用分而治之的方式进行密集型计算的程序中很有用。同时线程池维护一个所有同时运行的工作线程总数的上限,如果有过多的活动线程就会加重操作系统的负担,使诸如CPU缓存失效等问题,当达到这个上限后,就要进行排队。这个线程队列使得任意并发的应用成为可能,如Web服务器就是这种原理。
有多种方式进入线程池:
CurrentTread.IsThreadPoolThread
        static void Main(string[] args)
        {
            Task.Factory.StartNew(Go);
            Console.WriteLine("Is Thread Pool: " + Thread.CurrentThread.IsThreadPoolThread.ToString());
            Console.ReadKey();
        }
        static void Go()
        {
            Console.Write("Is Thread Pool: " + Thread.CurrentThread.IsThreadPoolThread.ToString());
        }
        static void Main(string[] args)
        {
            Task<string> task = Task.Factory.StartNew<string>(Go);
            
            Console.WriteLine("Is Thread Pool: " + Thread.CurrentThread.IsThreadPoolThread.ToString());
            if (task.IsCompleted)
            {
                string result = task.Result;
                Console.WriteLine(task.IsCompleted.ToString() +  result);
            }
            Console.ReadKey();
        }
        static string Go()
        {
            return Thread.CurrentThread.IsThreadPoolThread.ToString();
        }