5

是否有任何简单的方法可以显式地使已经线程化的应用程序利用多核环境?(如果有)。

第一个问题是如何确定我的运行时环境是否支持多核应用程序?

如果我确定我可以使用多核功能,我可以显式分配线程以在不同的内核上运行吗?如果是这样,线程通信是由操作系统/硬件处理还是我必须弄脏我的手?

4

5 回答 5

11

如果您的应用程序已经正确线程化,则您无需执行任何操作。线程上下文执行和处理为您完成。

现在谈到线程,您的应用程序是否以利用内核的方式进行线程化?您是否将处理器密集型任务拆分为单独的线程。如果没有,那么您将需要进行更改以将处理任务拆分为更多线程。您可以使用 Environment.ProcessorCount 获取核心计数,并在运行时为您的任务创建尽可能多的线程。

到目前为止,实际上没有任何方法可以利用所有处理器/内核将不正确的线程应用程序(单线程)变成线程应用程序,除非您期待未来的技术,例如plinqParallel FX

于 2008-10-10T07:00:19.020 回答
3

嗨,我知道有 2 个扩展名

并行 C# 主页

查看 MS June CTP 上的 Somasegars MSDN 博客,了解并行 3.5 扩展

MSDN

该库由以下组件组成:

  • 任务并行库 (TPL),它为命令式数据和任务并行提供支持。
  • 并行 LINQ (PLINQ),它提供对声明性数据并行性的支持。
  • 协调数据结构 (CDS),为工作协调和管理共享状态提供支持。
于 2008-10-10T07:00:37.273 回答
1

Currently, you can set the available processors for a given process using Process.ProcessorAffinity, but assigning specific threads to specific processors is handled under the hood implicitly. This is actually a good thing most of the time, as an intelligent runtime using real-time performance and load balance information can usually do a better job than you can statically, at least for the few-core context mainstream multicore operates in.

于 2008-10-10T07:00:55.680 回答
1

那就是问题所在。如何制作线程应用程序,如何转换现有代码。我想在 C# 中利用多核。但是,ParallelFX 仍处于测试阶段。我不会使用测试版进行开发。而且,我不想再次更改所有代码(我从 VB 6 翻译了我的应用程序)。今天,我收到了来自 Packt Publishing 的时事通讯,其中宣布了一本关于使用 C# 进行并行编程的新书。C# 2008 和 2005 线程编程。我认为它集中在我们到处写博客的事情上。如何在不等待新的奇迹语言的情况下思考和开发线程应用程序。看到完全专注于该主题的书籍很酷,因为我们有很多关于该主题的博客。链接是http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book 我认为它值得一个机会。当我购买它时,我会告诉你我的反馈。

于 2009-01-22T10:14:12.827 回答
0

在不深入细节的情况下(我不确定有多少信息是公开的),.NET 框架的下一个版本将更有帮助。您可能不想或不需要考虑手动管理线程。我确信在 PDC(10 月底)之后会公开更多关于此的信息。

于 2008-10-10T06:56:13.117 回答