2010-11-04 46 views
0

這是參考發表在MSDN雜誌2010年9月線程和後臺工作有什麼區別?

在這篇文章中筆者提出在下載使用HTTP使用Web客戶端從網頁文件的問題的文章「Simplify Asynchronous programming with Tasks」。

作者解釋說,解決長時間運行的進程凍結UI線程問題的一種方法是通過從線程池創建線程並使其運行單獨的線程。作者解釋說,這不是一個好的解決方案,因爲隨着更多進程的運行,線程池最終會創建更多影響性能的線程。

作者繼續解釋解決問題的另一個策略是創建一個基於事件的應用程序。 WebClient通過基於事件的模式實現異步操作。我到目前爲止是作者。

然後他解釋說:「這個實現解決了一個效率低下的基於線程的解決方案之一:不必要的線程阻塞。對async的調用立即返回,並且不會阻塞UI線程或線程池線程。 該過程在後臺執行'。

這個詞'背景'究竟是什麼意思?它與線程有什麼不同? 謝謝

回答

1

背景」在這種情況下是專門創建處理阻塞任務的線程。它與ThreadPool Thread沒有任何區別,除了它不是池的一部分。

避免使用ThreadPool,因爲它只能分配有限數量的線程(MSDN將其定義爲每個處理器250個工作線程和1000個I/O完成線程)。這個限制是爲什麼在ThreadPool線程上進行一些阻塞調用是可以接受的,但是如果您從池中進行大量阻塞調用,它將達到ThreadPool的作業隊列開始備份的點,因爲缺少可用的工作人員和業績降低。您還可以增加ThreadPool中可用線程的數量,但這會帶來性能損失,因爲每個線程都有自己的從存儲器分配的堆棧空間。


對於那些閱讀,文章提到奈爾位於這裏:http://msdn.microsoft.com/en-us/magazine/ff959203.aspx