线程和后台工作有什么区别?

时间:2010-11-04 17:47:44

标签: asynchronous

这是参考2010年9月MSDN杂志上发表的一篇文章“Simplify Asynchronous programming with Tasks”。

在本文中,作者提出了使用HTTP从Web页面使用WebClient下载文件的问题。

作者解释说,解决长时间运行进程冻结UI线程问题的一种方法是从线程池创建一个线程并使其运行一个单独的线程。作者解释说这不是一个好的解决方案,因为随着更多进程的运行,线程池最终会创建更多线程,从而影响性能。

作者接着解释说,解决问题的另一个策略是创建基于事件的应用程序。 WebClient通过基于事件的模式实现异步操作。到目前为止,我和作者在一起。

然后他解释说'这个实现解决了一个低效的基于线程的解决方案的问题:不必要的线程阻塞。对异步的调用立即返回,并且不会阻止UI线程或线程池线程。 该过程在后台执行'。

背景”这个词究竟是什么意思?它与线程有什么不同? 感谢

1 个答案:

答案 0 :(得分:1)

后台”在此上下文中是专门为处理阻止任务而创建的线程。它与ThreadPool Thread没有任何不同,除了它不是池的一部分。

避免使用ThreadPool,因为它只能分配有限数量的线程(MSDN将此定义为每个处理器250个工作线程,以及1000个I / O完成线程)。这个限制是为什么在ThreadPool线程上进行一些阻塞调用是可以接受的,但是如果从池中进行大量的阻塞调用,它将达到ThreadPool的作业队列由于缺乏可用而开始备份的程度。工人和业绩降低了。您还可以增加ThreadPool中可用线程的数量,但这会带来它自身的性能损失,因为每个线程都有自己从内存中分配的堆栈空间。


对于那些阅读,Nair提到的文章位于:http://msdn.microsoft.com/en-us/magazine/ff959203.aspx