2011-06-23 78 views
1

今年我們正在移動操作系統和處理器體系結構。我們目前的應用程序並不是特別的線程安全,但是,它在當前的規範上正常工作。我們也正在轉向.net4。從32位xp移動到64位Win7 - 線程影響

我們正在用正確的threadsafemanner重寫應用程序,但是這是一個多年的項目,我們在此期間別無選擇,但移動了編碼不佳的系統。

我的問題是這樣的:有沒有人有過類似的情況?我們如何才能確保在我們開始使用新規格之前擺脫所有問題?有減少這些線程風險的好方法嗎?另外,線程調度和行爲方面的主要變化是什麼,我們應該謹慎行事? ThAnks的任何幫助

回答

2

我不知道任何操作系統或框架,將徹底改變現有的應用程序中的線程調度。我預見到的最大風險是新CPU可能會比現在運行速度更快(通常新速度更快),這將改變您的程序在每個時間段執行的代碼量。如果一個線程處於等待狀態,則會有更多時間片可供其他線程運行。任何現有的休眠線程錯誤都可能由於這種時間變化而更頻繁地出現。或者你可能會繼續幸運。你沒有提到這一點,但如果你第一次轉向多核硬件,你幾乎肯定會在你的進程中看到更大的併發性(並因此有發生衝突的風險)。

對於緩解,除了檢查共享數據/代碼和正確保護可以同時訪問的所有內容之外,確實沒有好的補救措施。如果你在測試中遇到了災難性問題(在部署正確之前你打算執行完全壓力和迴歸?),你可以考慮在你的線程或相關函數頂部的某種'大鎖',以確保有風險的代碼不能交叉與同行的路徑。這可能會降低性能,但無論如何,高性能的代碼總是崩潰。

2

正如史蒂夫湯森提到的,不應該有任何顯著差異,需要注意幾個問題:

  1. 從32位過渡到64位可能會導致問題,因爲指針剛剛較大。這意味着您不能再使用DWORD值來保存指針。
  2. Vista和Win7都支持超線程技術。這意味着他們將更有效地在不同的邏輯內核上調度任務。這可能意味着您會看到意外的上下文切換(正如Steve寫的),可能會暴露應用程序中的現有併發問題。
+0

謝謝拉里 - 很高興收到你的來信 –