我正在尋找考慮可伸縮性和性能的最佳使用線程方式。ASP.NET線程:我應該使用數據庫進行數據庫和電子郵件操作嗎?
在我的地盤我有兩個場景是需要線程:
UI觸發:例如用戶點擊一個按鈕,服務器應該讀從DB數據和發送電子郵件一些。這些操作需要時間,我不希望用戶請求延遲。這種情況經常發生。
後臺服務:當應用程序啓動時,它觸發運行,每10分鐘一個線程,從數據庫中讀取和發送電子郵件。
的解決方案,我發現:
A.使用線程池 - BeginInvoke的: 這是我今天用這兩種方案。 它工作正常,但它使用相同的線程爲頁面提供服務,所以我認爲我可能遇到可伸縮性問題,這會成爲一個問題嗎?
B.否使用游泳池 - 的ThreadStart: 我知道開始一個新的線程需要更多的資源,然後使用一個線程池。 這種方法可以更好地適用於我的場景嗎? 什麼是重用打開的線程的最佳方式?
C.自定義線程池: 因爲我的情況經常發生,也許最好的辦法是開始一個新的線程池?
謝謝。
+1好的解耦和更好的容錯性。 – 2009-12-02 09:10:09
這兩種情況都適用嗎?或者第一個可以通過使用異步頁面來解決?目前我在共享主機上,所以不同的服務不是一種選擇,如果我不得不使用線程哪個選項更好? BeginInvoke會成爲一個可伸縮性問題嗎? – SirMoreno 2009-12-02 09:48:36
我懷疑要麼使用單獨的線程,要麼線程池可以工作。鑑於您不希望用戶不得不等待,我不確定異步頁面是否會幫助您。我對他們瞭解不多,但他們似乎是要讓長期運行的請求更有效率 - 你不希望你的請求長時間運行,你只是想讓它開始後臺任務。 – 2009-12-02 10:22:10