Thread与ThreadPool耗时对比C#
2022/6/13 1:21:30
本文主要是介绍Thread与ThreadPool耗时对比C#,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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();//再启动记时器。 for (int i = 0; i < 1000; i++) { ThreadPool.QueueUserWorkItem((s)=> { int cnt = 0; cnt++;//任意执行的一个动作 }); sw.Stop();//停止记时器 } Console.WriteLine("用线程池执行1000个线程用时:" + sw.ElapsedMilliseconds+"ms");//读出1000线程在线程池中运行所用的时间 Console.ReadKey(); } } }
运行结果:
使用 ThreadStart 和 ParameterizedThreadStart 创建线程还是比较简单的,但是由于线程的创建和销毁需要耗费一定的开销,过多的使用线程反而会造成内存资源的浪费,从而影响性能,出于对性能的考虑,于是引入了线程池的概念。线程池并不是在 CLR 初始化的时候立刻创建线程的,而是在应用程序要创建线程来执行任务的时候,线程池才会初始化一个线程,初始化的线程和其他线程一样,但是在线程完成任务之后不会自行销毁,而是以挂起的状态回到线程池。当应用程序再次向线程池发出请求的时候,线程池里挂起的线程会再度激活执行任务。这样做可以减少线程创建和销毁所带来的开销。线程池建立的线程默认为后台线程。每个线程要消耗1M内存。
简单说:线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。线程池非常适合大量小的运算。当应用程序想要执行一个异步操作时,需要调用QueueUserWorkItem方法将对应的任务添加到线程池中。线程池会从队列中提取任务,并且将其委派给线程池中的线程执行。
这篇关于Thread与ThreadPool耗时对比C#的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#