2010-08-25 22 views
1

我的情況是這樣的,我有一個文件,在一兩個小時的過程中(MP3,視頻等)緩慢地填充。在填充此文件時,許多用戶連接到服務器以在添加到服務器時接收新數據。什麼是ASP.NET線程池的正確使用?

此刻每個訪問者都連接到服務器,IHttpAsyncHandler會從線程池中分配一個線程來處理請求。但是,使用默認的線程池設置,這意味着一次只有20個訪問者可以連接到服務器(單個處理器)。

因爲大多數時候這些線程只是在等待新數據,所以將線程釋放到池中的最佳方式是什麼,並在有新數據可用時將其重新激活。

非常感謝, 安以軒

回答

1

我只想用普通Thread S表示這一目的。 .NET ThreadPool並不是真的被設計用來支持(長時間運行)線程的釋放和重新激活,這取決於它們的內部狀態......至少,你必須做一些創造性的編程來達到所需的行爲if您堅持使用ThreadPool(即將邏輯分解爲由ThradPool執行的小型異步任務)。

如果使用Thread,那麼您將直接控制所有活動線程,以便您可以同時接受更多訪問者。

0

F#有一個名爲Asynchronous Workflows的功能,非常適合這類事情。當您的代碼正在等待外部數據源時,線程將返回到線程池以供其他用途。當新數據到達時,工作流會從線程池中獲取一個線程,並使用它從您離開的地方恢復代碼。通過這種方式,你永遠不必綁定一個無所事事,只能等待I/O的線程。

對於這種使用學習一種新的語言可能矯枉過正,但是當涉及到異步I/O時,F#超越了每種其他CLR語言,而且這是一種非常有趣的語言。

相關問題