2010-11-02 41 views
2

背景極限次數由工藝

我目前正在重構遺留.NET應用程序所使用的處理器。該應用程序在相對較長的時間段內(長達幾個小時)執行復雜的數學計算,在此期間,多個線程上的處理器使用率幾乎連續發生。

每個用戶都有一個專門用於運行應用程序實例(他們使用其他機器運行所有其他應用程序)的8核心計算機。該應用程序使用共享系統帳戶執行,允許支持人員在需要時通過遠程桌面連接到本機並監視應用程序(這經常發生)。

當應用程序進程啓動時,它設置它自己的處理器親緣關係被設置爲使得進程被允許使用除一個處理器以外的所有處理器。例如。在8處理器機器上,親緣關係被設置爲0x007F(01111111),其將應用程序限制到處理器1到7並且阻止其執行處理器8上的任何線程。被排除的處理器總是由親和性中的最高位表示的處理器值。

這樣做的理由是,排除一個處理器可以讓服務器在服務遠程桌面會話時以及使用任何其他可能需要隨時使用的臨時監控工具時保持更高的響應速度(Baretail, Process Explorer等)。

問題

這是可能產生給出一個CPU的資源成本的應用帶來多少好處?

很顯然,我可以執行一些測試來收集經驗證據,但是測試機器的可用性是有限的,應用程序的行爲有很多外部依賴性,這意味着密集型處理器使用的時間很難確定。正確地對基準進行測試所需的時間和資源可能遠不是微不足道的。出於這個原因,我正在尋找理由或反對這樣做的理由。對我來說,這似乎是一個壞主意,因爲應用程序被阻止使用整個CPU的資源,而這些資源不可能被其他進程完全佔用。我想刪除處理器限制並允許Windows無限制地管理CPU分配。然而,如果我的懷疑是正確的,我需要能夠提出一些令人信服的論據來推銷這種變化。

+0

我剛纔的這種情況的經驗是,你不應該限制你的計算密集型應用程序。即使CPU處於100%利用率,您的操作系統也應該完全響應,因爲前臺線程優先。 – 2011-05-01 14:06:07

回答

3

儘管我現在無法提供有關您現在如何做的大量實際事實,但我的直接反應是您說得對,並且您描述的當前方法是錯誤的。

我建議的是減少長時間運行的進程的執行優先級。在一個典型的情況下,任何低於正常水平的工作都會同樣好。這使得進程只要沒有其他需要的資源就可以使用所有可用的資源,但是會在/如果需要時將所有必需的資源用於其他進程。

+1

+1 - 允許Windows根據優先級管理線程的想法也發生在我身上 - thx用於支持我關於 – 2010-11-02 17:46:21

+0

編輯的想法:將'硬性事實'改爲'說服參數';-) – 2010-11-03 08:40:26