2009-07-02 93 views
5

我的任務是編寫一個可在多核機器上運行的高性能高可用性服務。對多核硬件的.NET Framework支持

我需要使用任務中並行庫來真正利用多核服務器或將服務自動地在運行速度更快,如果我投入更多的硬件(核)? .NET框架爲我提供了魔法嗎?

其必然結果是,會不會有通過與更多的內核(保持每個單獨核心相同的規範),對於不使用TPL .NET應用程序升級的服務器是性能提升?

按我的理解(細讀喬達菲的書和他的博客),你真的需要多核編程。我的結論是否準確?

回答

7

這很難準確回答,因爲並行處理不是一個通用的問題。您需要分析項目以找到可以利用並行處理的位置。

如果你的應用程序可以很容易地分解成具體的獨立的任務,並行處理肯定會提高。如果它本質上是串行的,那麼多個內核/線程根本就不會真的有幫助。

如果你確定並行任務表示過程的核心,並行庫可以幫助你完成的基本任務,以及更容易得到正確的。

+0

謝謝保羅。我的應用程序肯定會有一定的並行性,應用程序將是多線程的。將創建線程利用多核硬件?框架(或OS?)是否可以(或應該)在不同的內核上運行線程,還是需要爲它明確編程? – Sprash 2009-07-03 00:05:27

+1

只需使用線程。操作系統將處理利用核心。 **雖然這是一個過於簡化的迴應。如果您即將解決這樣一個大型項目,那麼值得閱讀「Windows上的並行編程」http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie = UTF8&s = books&qid = 1246579844&sr = 8-1 – 2009-07-03 00:11:00

3

看看PLinq將在.NET 4.0中現身。它將爲您提供大量的並行處理功能,而無需管理任務/加載算法。

+0

是的,我非常期待等待PLinq和.NET 4.0。他們在這方面做了一些相當廣泛的工作。不幸的是,我不能冒險生產框架的alpha版本 – Sprash 2009-07-03 00:11:08

1

程序需要有多條執行路徑來利用超過1個內核/處理器的任何內容。通常這是通過運行多於一個線程來完成的,因爲大多數OS提供多於執行路徑的唯一方式是通過在一個進程內運行多個進程(可執行文件)或多個線程。

有建成現代語言與本質上是多線程更容易對付一些高層次的抽象,但首先更好地學習基礎知識; Threads