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