【问题标题】:How to write .NET applications that utilize multi-core processors如何编写利用多核处理器的 .NET 应用程序
【发布时间】:2010-10-11 02:27:40
【问题描述】:

随着多核处理器变得越来越流行,我认为熟悉如何编写代码以利用它们对我来说是明智的。我是一名 .NET 开发人员,不知道从哪里开始(说真的,我不知道从哪里开始)。有什么建议吗?

【问题讨论】:

    标签: .net multicore


    【解决方案1】:

    多核编程本质上是多线程编程。只要您的应用程序是多线程的,操作系统就会决定在哪个内核上运行哪个线程。

    那么,您真正的问题应该是,什么样的应用程序会从多线程中受益?想想这样一个应用程序,然后实例化多个线程来解决相同部分的问题。

    【讨论】:

    • 开始,我想我会写一些脱离四个线程的东西(我有一台四核机器)。每个线程将执行一个单独的控制台应用程序,该应用程序会在一两分钟内进行一些密集计算(以提高 CPU 使用率)。在这种情况下,我应该期望 100% 的 CPU 使用率,对吗?
    • 应该很准确。
    • 非常感谢您的帮助!我现在对此有了很好的理解。有道理,只有某些类型的应用程序会认为 4 核是必要的。
    【解决方案2】:

    最好的开始方法是获取并行扩展框架的最新 CTP 并开始研究他们的示例代码。

    【讨论】:

    • 也许并行扩展有点过头了。初学者不应该从手动线程开始,了解所有问题并学习基础知识吗?
    • 我倾向于认为通过这些学习会更好(因此我的回答是在 .net 4.0 上查找信息)。基本上,您花更少的时间在如何连接所有内容上,而将更多时间花在并行如何影响逻辑上。如果碰巧没有可用的来源,您可以使用反射器偷看:)
    【解决方案3】:

    阅读 .NET 使用的异步编程模型。研究允许委托在线程池中执行的 BeginXXX 和 EnxXXX 范式。

    Stream 类都有BeingXXX、EndXXX 方法(例如BeginRead、EndRead),它们允许您进行异步IO。如果您正在处理大量基于 IO 的事情,您会希望使用这些方法来提高并行度。

    【讨论】:

    【解决方案4】:

    我不再经常推荐书了,但是 Joe Duffy 的Concurrent Programming on Windows 简直是不可替代的。

    【讨论】:

      【解决方案5】:

      在 .net 4.0 上查找信息。它将为其添加不同的构造。

      【讨论】:

        【解决方案6】:

        就像 JaredPar 所说的并行扩展非常好。我和他们一起玩了一会儿,他们很容易使用并增加了性能。

        我非常喜欢的构造是 Parallel.ForEach() 和 PLinq。

        Parallel.ForEach 类似于 DotNet 2.0 集合中的 ForEach(delegate) 函数。它接受一个动作委托并并行运行它。

        Plinq 允许您通过在查询末尾添加 .AsParallel() 以并行方式执行任何普通 Linq 查询。

        查看 Jared 发布的链接以了解更多信息。

        【讨论】:

          【解决方案7】:

          这可能会产生good starting place

          【讨论】:

            【解决方案8】:

            只需将您的项目分成专门用于执行特定功能的多个线程,您就可以利用多个内核。操作系统负责将不同线程调度到最可用的处理器内核。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多