这是指2010年9月在MSDN杂志上发表的一篇文章“简化任务异步编程”。
在本文中,作者提出了使用WebClient从网页下载文件的问题。
作者解释说,解决长期运行的进程冻结UI线程的一种方法是从线程池创建一个线程,并让它运行一个单独的线程。作者解释说,这不是一个好的解决方案,因为随着更多进程的运行,线程池最终会创建更多的线程,从而影响性能。
作者接着解释了解决这个问题的另一个策略是创建一个基于事件的应用程序。WebClient确实通过基于事件的模式实现异步操作。到目前为止,我和作者在一起。
然后他解释说,这个实现解决了基于线程的解决方案之一:不必要的线程阻塞。异步调用立即返回,不会阻塞UI线程或线程池线程。进程在后台执行。
这里的“背景”这个词到底是什么意思?它和线程有什么不同?谢谢
发布于 2010-11-04 18:06:35
此上下文中的“后台”是专门为处理阻塞任务而创建的线程。它与ThreadPool线程没有任何不同,只是它不是池的一部分。
避免使用ThreadPool是因为它只能分配有限数量的线程(MSDN定义为每个处理器有250个工作线程,以及1000个I/O完成线程)。这就是为什么在ThreadPool线程上进行几次阻塞调用是可以接受的,但是如果您从池中进行了大量阻塞调用,那么ThreadPool的作业队列就会因为缺少可用的工作人员而开始备份,并且性能会降低。您还可以在ThreadPool中增加可用线程的数量,但这与其自身的性能损失有关,因为每个线程都有从内存中分配的自己的堆栈空间。
对于那些阅读者,Nair提到的文章位于这里:http://msdn.microsoft.com/en-us/magazine/ff959203.aspx
https://stackoverflow.com/questions/4099588
复制相似问题