我們已經找到正在通過2008年WS R2中的IIS(集成模式)運行WCF服務啓動的一些長期運行的業務流程。這些業務流程通常涉及與我們的SQL Server後端的大量交互。我們創建了一個自定義任務隊列實現,通過初始服務調用將請求排隊,然後根據優先級執行。這種執行可能需要很長時間才能完成(極端20-30分鐘)。然後,客戶端可以向服務器查詢他們自己後臺任務的進度。的線程池,相較於長期運行自己的主題處理
在我國目前實施的任務觸發關在一個單獨的線程從ThreadPool中執行,而不是。這是因爲reading recommendations未使用ThreadPool運行長時間運行的任務,以防止遏制ASP.NET請求被服務。我們通過對可同時執行的後臺任務數量設置上限來控制產生的線程數量。這樣我們試圖控制CPU上的負載並防止太多的線程上下文切換。當所有這些都發生時,我們當然仍然需要爲應用程序提供正常的「在線」請求。
在閱讀了Thomas Marquardt的this post之後,我很擔心我們沒有使用ThreadPool,因爲我們無法獲得內置調優啓發式的好處。我們已經通過掛接ApplicationEnd事件並取消長時間運行的任務來解決Thomas提到的關閉問題。所以我的問題是,我們應該切換到使用ThreadPool?這些線程被長時間捆綁在一起呢?如果我正確理解托馬斯,他會說這並不重要,因爲ThreadPool會調整自己以創建更多請求來提供正常的在線操作?我也讀過this StackOverflow question,涵蓋了相同的理由,但我仍然不確定未來的發展方向。
請詳細說明:您認爲您可能會錯過哪些具體調節? – 2010-12-13 06:29:33
也許「調」不是合適的詞,但我指的是如果使用ThreadPool線程執行後臺任務,ThreadPool「將會在系統中增加額外的」負載「由後臺任務完成。如果我們使用普通線程運行它們,ThreadPool就不具備這些知識。再次,我沒有ThreadPool啓發式如何精確工作的內部細節,但通過Thomas的帖子閱讀引起了我的擔憂,即我們通過運行它自己的非-ThreadPool線程 – Carel 2010-12-13 09:49:34