Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使我的代码在多核上运行?_C#_Multithreading_Multicore - Fatal编程技术网

C# 如何使我的代码在多核上运行?

C# 如何使我的代码在多核上运行?,c#,multithreading,multicore,C#,Multithreading,Multicore,我已经用C#构建了一个应用程序,我希望能够针对多核进行优化。我有一些线程,我应该做更多吗 更新以了解更多详细信息 C#2.0 在Windows Vista和Windows Server 2003上运行 再次更新 此代码作为服务运行 我不想有完整的代码。。。我的目标是获得你的经验和如何开始。就像我说的,我已经使用了线程。我还能做什么 对于C#,开始学习LINQ的工作方式,然后利用库及其.aspallel()扩展。您可能想看看.NET的并行扩展 为了能够更有效地利用多个核心,您应该将工作划分为

我已经用C#构建了一个应用程序,我希望能够针对多核进行优化。我有一些线程,我应该做更多吗

更新以了解更多详细信息

  • C#2.0
  • 在Windows Vista和Windows Server 2003上运行
再次更新

  • 此代码作为服务运行
  • 我不想有完整的代码。。。我的目标是获得你的经验和如何开始。就像我说的,我已经使用了线程。我还能做什么

对于C#,开始学习LINQ的工作方式,然后利用库及其.aspallel()扩展。

您可能想看看.NET的并行扩展


为了能够更有效地利用多个核心,您应该将工作划分为可以并行执行的部分,并使用线程将工作划分到多个核心上。您可以使用线程、后台工作线程、线程池等

您可能需要阅读Herb Sutter的专栏“有效并发”。你会发现这些文章和其他文章。

我认为编写一个高度优化的多线程进程要比在混合中加入一些线程困难得多

我建议从以下步骤开始:

  • 将工作负载拆分为离散的并行可执行单元
  • 测量和描述工作负载类型—网络密集型、I/O密集型、CPU密集型等—这些将成为工作人员池策略的基础。e、 对于网络密集型应用程序,您可以拥有相当大的工作线程池,但对于CPU密集型任务,拥有比硬件线程更多的工作线程是没有意义的
  • 考虑使用队列/数组或ThreadWorkerPool来管理线程池。前者比后者更容易控制细粒度
  • 如果可以的话,学习更喜欢异步I/O模式而不是同步模式-释放更多的CPU时间来执行其他任务
  • 努力消除或至少减少围绕争用资源(如磁盘)的序列化
  • 尽量减少I/O,获取并保持最低级别的锁,以尽可能短的时间。(读写器锁是您的朋友)
    5.梳理代码,确保资源以一致的顺序锁定,以最大限度地减少致命的威胁
  • 疯狂的测试-多线程应用程序中的竞争条件和bug很难排除-通常你只能看到大屠杀的法医学后果

  • 请记住,完全有可能多线程版本的性能比同一应用程序的单线程版本差。没有理由进行良好的工程测量。

    了解您试图解决的问题、应用程序及其算法中的并行性(或潜在并行性)比线程同步、库等的任何细节都重要得多


    从阅读开始(重点是“发现并发性”和更高级别的设计问题),然后继续阅读(从理论基础开始的实践细节)。

    只有使用线程技术,我才能在其他核心上继续?其他答案需要FramWork 3.5,所以你认为我可以用FrameWork 2.0来完成吗?是的,多线程或多进程,这是一种线程方式。是的.NET2.0可以处理线程。还请注意,您不需要Thread类来使用多个内核,但最终它们都使用线程。