C#的 Task,Thread,ThreadPool 之间有什么异同

如题所述

首先说Thread、ThreadPool
前台线程:主程序必须等待线程执行完毕后才可退出程序。Thread默认为前台线程,也可以设置为后台线程
后台线程:主程序执行完毕后就退出,不管线程是否执行完毕。ThreadPool默认为后台线程
线程消耗:开启一个新线程,线程不做任何操作,都要消耗1M左右的内存
ThreadPool为线程池,其目的就是为了减少开启新线程的消耗(使用线程池中的空闲线程,不必再开启新线程),以及统一管理线程(线程池中的线程执行完毕后,回归到线程池中,等待新任务)
总结:ThreadPool性能会好于Thread,但是ThreadPool与Thread对线程的控制都不是很够,例如线程等待(线程执行一段时间无响应后,直接停止线程,释放资源,两者都没有直接的API,只能通过硬编码实现)。同时ThreadPool使用的是线程池全局队列,全局队列中的线程,依旧会存在竞争共享资源的情况,从而影响性能。

下面说Task
Task背后的实现,也是使用的是线程池线程。但是它的性能优于ThreadPool,因为它使用的不是线程池的全局队列,而是使用的是本地队列。是的线程之间竞争资源的情况减少。
Task提供了丰富的API,开发者可对Task进行多种管理,控制。
温馨提示:答案为网友推荐,仅供参考
相似回答