任务即Task类,线程即Thread类。
使用任务执行并行和并发代码是微软强烈推荐的,因为任务比线程的抽象级别更高,而且任务是并行的。关于并发和并行的区别,这里就不做介绍了,网上有很多资料。
1、线程池
创建任务的基本原理是使用线程池,也就是说任务最终也是要交给线程去执行的。但是微软优化了任务的线程池,使线程的控制更加精准和高效。对于需要频繁创建线程的程序来说,使用线程池无疑是最好的选择。因为创建一个线程需要消耗大量的系统资源,而线程池很好的解决了这个问题。当你使用线程池创建10个线程时,系统可能只创建了3、4个线程,因为线程池中的线程是可以循环使用的。下面举个例子说明一下:
这里使用task创建了10个任务,但是系统只创建了4个线程。创建的线程数是根据个人电脑配置不同而不同的。
再看一下使用Thread类创建线程的情况:
可以看到这里创建了10个线程,而且在时间上也比使用任务创建线程的时间要长。
这是任务和线程的区别之一,也是优势之一,下面介绍另一个区别
2、并行
我们知道现在的电脑CPU基本上都是多核的,并行就是很好的利用了多核,更加高效的利用了电脑的硬件资源。
当我们使用task类创建一个任务时,这个任务默认就是并行执行的。而使用Thread创建多个线程时,默认是并发执行的。
3、前台线程和后台线程
task默认是后台线程,而thread默认是前台线程。关于前台线程和后台线程的区别这里不做介绍。
当然我们也可以设置task为前台线程,Thread.CurrentThread.IsBackground,将IsBackground设置为false即可。
我们也可以使用同样的属性把thread设置成后台线程。
4、总结
任务是微软强烈推荐处理多线程的有效类库,请尽可能使用任务创建多线程。