我的應用程序在4個併發線程上運行。我可以將這些線程作爲多線程以及單線程(MTA/STA)。當我聲明他們STA時,結果比我聲明他們的MTA更快。它是用vb.net編寫的,我使用2003服務器(windows)標準版作爲操作系統,處理器是單核和四核。多處理器與多核心之間的區別
我應該怎麼做,使之更快?
我可以增加處理器數量爲2,或我可以使用hexcore /八核處理器來代替。 任何人都可以建議嗎?
謝謝。
我的應用程序在4個併發線程上運行。我可以將這些線程作爲多線程以及單線程(MTA/STA)。當我聲明他們STA時,結果比我聲明他們的MTA更快。它是用vb.net編寫的,我使用2003服務器(windows)標準版作爲操作系統,處理器是單核和四核。多處理器與多核心之間的區別
我應該怎麼做,使之更快?
我可以增加處理器數量爲2,或我可以使用hexcore /八核處理器來代替。 任何人都可以建議嗎?
謝謝。
多個處理器意味着在主板上有多個處理器芯片。多核意味着芯片上有多個處理單元。多個處理器將具有不同的前端總線,並且多個內核通常會共享L2緩存。這些都有優勢,取決於你在做什麼。
對於你的問題的第二部分,答案是具體的少。如果您所做的工作不那麼複雜,多線程的開銷可能會超過性能收益。另外,如果你的線程試圖訪問相同的共享內存,鎖定會減慢它們。你的線程也可能是瓶頸在IO做磁盤。沒有關於你實際在做什麼的信息,很難說你的問題是什麼以及如何進一步進行。購買更新,更快,更大的處理器會加快速度,但這並不能解決您爲什麼認爲程序運行速度不快的問題。花點時間處理代碼,然後再開始在這個問題上投入資金。
「在開始投入資金解決問題之前,先花一些時間處理代碼」。雖然我同意,但我認爲應該注意的是,與代碼**一起工作的時間同樣也是**問題的根源。有時 - 非常遲鈍 - 更大/更好的機器是更快和更便宜的解決方案。 – 2011-03-14 11:20:07
@BinaryWorrier:的確如此。這是一個快速而現在的解決方案與可能需要時間的解決方案之間的平衡,可能會導致錯誤,但也可以解決放緩的根本原因。 – unholysampler 2011-03-14 11:33:21
MTA應該比STA慢,因爲,正如其名稱所示,多個線程數可能在該公寓中運行,所以很多事情都必須涉及鎖定。即使你只有一個單線程在那裏運行,鎖定仍然必須完成,從而導致開銷。因此,在4x STA上運行的4個線程將比在4x MTA上運行的4個線程更快,即使線程和公寓是一對一匹配的。如果您不打算在對象上運行多個線程,則無法通過使您的公寓模式MTA獲得任何內容。
添加更多處理器和/或內核將幫助你爲你的四個線程都可能是在不同的內核上運行。
但是,增加更多的內核數量將會比線程數量增加而不是會增加性能,因爲一個線程只能在一個內核上運行。在你的例子中,你的四個線程應該運行在4個內核上(不管它們屬於同一個處理器)。爲系統程序添加一個或兩個內核(假設您不運行任何其他內容)和驅動程序,並且您可能最大限度地減少。除非增加線程數量,否則添加更多內核將無濟於事,因爲這些內核可能處於空閒狀態。
其他事情也會影響您的併發性能:如果您的線程中存在爭用點的共享資源,並且線程始終等待此資源上的鎖,則添加更多內核可能無助於您因爲你的瓶頸在訪問共享資源,線程正在空閒等待。在這種情況下,升級到更快的CPU(就時鐘速度而言)會更快,因爲它會增加您滿足的資源的釋放速度。
添加處理器通常會比在同一處理器上增加內核更快,因爲不同的核的單個處理器中共享內部資源,並且如果一個核心正在使用資源,其他核塊。不過,我曾經聽說過,當多個處理器必須訪問相同的內存位置時,添加內核的速度會更快,並且同一信息可以存儲在一個處理器內的緩存中,並在所有內核之間共享。
供參考:MTA/STA是COM線程的公寓。請參閱http://msdn.microsoft.com/en-us/library/ms693344(v=vs.85).aspx – 2011-03-14 10:47:09