C#中Thread、ThreadPool、Task的区别

在.Net Framework中提供了Thread 、ThreadPool、Task三种类型都是为了处理耗时的任务,都是异步的;

对于Thread和ThreadPool而言:

前台线程:主程序必须等待线程执行完毕后才能推出程序,Thread默认为前台程序,可以设置为后台程序;

后台程序:主程序执行完毕后就退出,不管线程是否完成,Thread Pool默认时后台程序

线程消耗:

开启一个新线程,线程不做任何操作,都要消耗1M左右的内存

Thread Pool 是线程池其目的是为了减少开启新线程消耗的资源(使用线程池中的空闲线程,不必开启显得线程以及统一管理线程)线程池中的线程在执行完毕后回归到线程池中,等待新的任务分配

总结:Thread Pool 性能优于Thread 但是Thread和Thread Pool对线程的控制都不是很好,例如线程等待(线程执行一段时间无响应后,直接停止线程,释放资源等都没有直接的API来控制,只能通过硬编码来实现,同时Thread Pool使用的是线程池全局队列,全局队列中的线程依旧会存在竞争资源的情况,从而影响性能)

对于Task

Task的背后使用的线程池技术进行实现的,但是它的性能要优于Thread Pool,因为它的使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的竞争减少。同时Task提供了丰富的API来管理线程控制。但是相对于前面的两种耗内存,Task依赖于CPU对于多核CPU性能远超前两者,单核的CPU三者的性能没有什么差别。

 

转载于:https://my.oschina.net/u/2475253/blog/3076023

你可能感兴趣的:(C#中Thread、ThreadPool、Task的区别)