线程池

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


namespace ThreadPoolDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 线程池里的线程都是后台线程,当使用完线程后,该线程又被放回到线程池中可以进行重用,
            ThreadPool.QueueUserWorkItem(s => { Console.WriteLine(s); },"我是参数");
            Console.WriteLine("我先输出,然后再输出线程中消息");

            // 手动创建一个线程:开辟一个内存空间,1M内存;线程有可能占用部分的寄存器
            // 线程数量非常多的时候,操作系统花费大量时间去切换线程
            // 线程池 vs 手动创建线程

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 1000; i++)
            {
                new Thread(() => { int a = 0; a++; }).Start();
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed.TotalSeconds);

            sw.Restart();
            for (int i = 0; i < 10000; i++)
            {
                ThreadPool.QueueUserWorkItem((s) => { int a = 0; a++; }, null);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed.TotalSeconds);

            Console.ReadKey();
        }
    }
}

posted @ 2014-12-12 23:12  萌浩  阅读(120)  评论(0编辑  收藏  举报