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(); } } }