2010-07-08 18 views
3

我有一個運行腳本的ASP.net頁面,它需要1秒到10分鐘之間的任何時間才能運行,這取決於傳遞給它的參數。在IIS上運行的ASP.net頁面是否使用多核處理器?

我的問題是,如果服務器是多核的,這個腳本會自動使用所有的處理器,還是被限制爲一個。

感謝您的任何幫助

+0

我們在說服務器腳本還是客戶端JavaScript? – 2010-07-08 11:26:00

+0

服務器端ASP.net(VB.net)腳本 – 2010-07-08 11:27:01

回答

2

不,頁面只能在一個核心上運行。

IIS使用多個線程處理請求,但每次請求一次只使用一個線程。

如果您希望代碼使用多個內核,您必須自己啓動線程。

+0

謝謝! – 2010-07-08 11:38:20

2

我相信每個請求只被分配一個處理器/線程默認情況下。你可以通過在你的代碼中創建多個線程來完成你的工作來優化它(這樣你可能會使用更多的處理器)。

您可以將您的應用程序池標記爲擁有更多線程,但這不會將更多線程/處理器分配給單個請求,但會允許您一次處理更多請求(因爲線程上的請求是均衡的)。

1

ASP.NET是多線程的。 因此,一個新的線程用於處理每個頁面請求。 如果將新線程分配給不同的CPU /內核,這一切都取決於給定處理器的工作負載。 但是,您的所有內核都由ASP.NET使用。所以你的應用永遠不會侷限於一個CPU。

但真正的問題是:你的目標是什麼? 1]你只是害怕你的長時間運行的操作將掛起ASP.NET? 2]或者你是否希望減少腳本執行所需的時間?

如果你使你的長時間運行的頁面異步,那麼每個線程將立即返回到ASP.NET線程池 ,這將大大增加你網站的性能。解決問題1.

閱讀並行任務庫擴展,瞭解如何更有效地使用所有內核來處理長時間運行的任務。大多數任務可以分爲可以並行運行的子任務 。這解決了問題2.

希望這會有所幫助。

+0

謝謝,很好的答案。我正在考慮縮短總執行時間。該腳本是一個巨大的循環,有時會遞歸併評估數十萬個狀態。你認爲看看運行多線程會對我有好處嗎?如果我有兩個線程,一個可以從循環的開始開始,另一個可以從中間開始(這是可計算的)。理論上將執行速度減半? – 2010-07-08 11:51:13

+0

如果你正在循環一個集合,集合中的每個項目都獨立於所有其他項目,那麼這肯定是可能的。 但我也認爲並行任務庫是爲這種任務創建的。使用PTL,您只需執行循環,並且庫處理將可用核心上的每個循環迭代進行分割。 因此,您不需要花費一,二,三,甚至一百個線程。這一切都發生自動神奇。 – 2010-07-08 12:05:54

相關問題