特点及用途见
三种方式的性能对比
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ThreadTaskPoolComparison
{
//public class Program
//{
// static void Main(string[] args)
// {
// Console.WriteLine("Hello, World!");
// ThreadPool.SetMinThreads(1, 1);
// int a = 0;
// for (int i = 0; i < 150; i++)
// {
// //12
// Task.Run(() => { Console.WriteLine("Task start" + DateTime.Now); Thread.Sleep(240000); });
// new Thread(() => { Console.WriteLine($"Thread start{a} " + DateTime.Now); Thread.Sleep(240000); }).Start();
// a++;
// }
// Console.WriteLine("结束 " + a);
// Console.ReadLine();
// }
//}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Thread与ThreadPool对比
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();//启动计时器
for (int i = 0; i < 1000; i++)//循环创建1000个线程
{
Thread NewThread = new Thread(() =>
{
int cnt = 0;
cnt++;//任意执行的一个动作
});
NewThread.Start();
}
sw.Stop();//停止记时器
Console.WriteLine("创建1000个Thread线程的时间:" + sw.ElapsedMilliseconds + "ms");//读出1000个线程创建所用的时间ms
sw.Restart();//归0记时器
sw.Start();//再启动记时器。
//ThreadPool.SetMinThreads(1000, 1000);
for (int i = 0; i < 1000; i++)
{
ThreadPool.QueueUserWorkItem((s) =>
{
int cnt = 0;
cnt++;//任意执行的一个动作
});
sw.Stop();//停止记时器
}
Console.WriteLine("用线程池执行1000个线程用时:" + sw.ElapsedMilliseconds + "ms");//读出1000线程在线程池中运行所用的时间
sw.Start();//再启动记时器。
for (int i = 0; i < 1000; i++)
{
Task task = new Task(new Action(() =>
{
int cnt = 0;
cnt++;//任意执行的一个动作
}));
sw.Stop();//停止记时器
}
Console.WriteLine("用任务执行1000个线程用时:" + sw.ElapsedMilliseconds + "ms");//读出1000线程在线程池中运行所用的时间
Console.ReadKey();
}
}
}
}
线程的使用
https://blog.csdn.net/bayinglong/article/details/83105772