【发布时间】:2010-10-11 02:27:40
【问题描述】:
随着多核处理器变得越来越流行,我认为熟悉如何编写代码以利用它们对我来说是明智的。我是一名 .NET 开发人员,不知道从哪里开始(说真的,我不知道从哪里开始)。有什么建议吗?
【问题讨论】:
随着多核处理器变得越来越流行,我认为熟悉如何编写代码以利用它们对我来说是明智的。我是一名 .NET 开发人员,不知道从哪里开始(说真的,我不知道从哪里开始)。有什么建议吗?
【问题讨论】:
多核编程本质上是多线程编程。只要您的应用程序是多线程的,操作系统就会决定在哪个内核上运行哪个线程。
那么,您真正的问题应该是,什么样的应用程序会从多线程中受益?想想这样一个应用程序,然后实例化多个线程来解决相同部分的问题。
【讨论】:
最好的开始方法是获取并行扩展框架的最新 CTP 并开始研究他们的示例代码。
【讨论】:
阅读 .NET 使用的异步编程模型。研究允许委托在线程池中执行的 BeginXXX 和 EnxXXX 范式。
Stream 类都有BeingXXX、EndXXX 方法(例如BeginRead、EndRead),它们允许您进行异步IO。如果您正在处理大量基于 IO 的事情,您会希望使用这些方法来提高并行度。
【讨论】:
我不再经常推荐书了,但是 Joe Duffy 的Concurrent Programming on Windows 简直是不可替代的。
【讨论】:
在 .net 4.0 上查找信息。它将为其添加不同的构造。
【讨论】:
就像 JaredPar 所说的并行扩展非常好。我和他们一起玩了一会儿,他们很容易使用并增加了性能。
我非常喜欢的构造是 Parallel.ForEach() 和 PLinq。
Parallel.ForEach 类似于 DotNet 2.0 集合中的 ForEach(delegate) 函数。它接受一个动作委托并并行运行它。
Plinq 允许您通过在查询末尾添加 .AsParallel() 以并行方式执行任何普通 Linq 查询。
查看 Jared 发布的链接以了解更多信息。
【讨论】:
这可能会产生good starting place。
【讨论】:
只需将您的项目分成专门用于执行特定功能的多个线程,您就可以利用多个内核。操作系统负责将不同线程调度到最可用的处理器内核。
【讨论】: