2009-07-02 67 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