【问题标题】:Some questions about executing programs across multiple cores [closed]关于跨多个内核执行程序的一些问题[关闭]
【发布时间】:2011-10-01 11:04:45
【问题描述】:

我正在尝试使用线程多次执行单个程序(将负载分散到内核中)。我有两个内核,所以我猜我需要创建两个线程。当一个线程完成时,该线程需要再次重用才能执行。我迷路了怎么办?

【问题讨论】:

  • 您在哪个部分有问题?创建两个Threads,让每个人运行一些工作。也许他们可以从Queue 获取工作项目。线程要做什么工作?
  • 他们将执行程序。因此,通过拥有两个线程,它将在两个不同的内核上执行一个 .exe。我在徘徊,我应该使用线程池吗?还是只创建两个线程?如果我创建了两个线程,我怎么知道一个线程何时完成?
  • @Joey G - 在线程上使用join 允许您的代码阻塞,直到加入的线程完成。 See this
  • 下次尝试至少花一些时间在谷歌上搜索“C#并行”,这样您至少有知识来形成一个真正的问题。任何人都可以做的最好的事情就是告诉你去阅读 TPL(正如 Eric Lippert 在下面所做的那样。)
  • @mquander,客气点...有些人很难弄清楚这些概念。

标签: c# multithreading multicore


【解决方案1】:

不要尝试自己编写线程管理代码。使用Task Parallel Library;这正是它的目的。

根据您提出问题的方式,我怀疑您对线程的工作方式没有很好的了解。您可能还会将线程与进程混淆。你能更详细地描述你的程序正在做的工作吗?使用多个进程可能是正确的方法,但您更可能希望一个进程具有多个线程。

【讨论】:

  • 好的。假设我有一个程序要执行一千次。我想使用循环将执行分配给线程,这样它们就会分布在内核中,这样它就会运行得更快而不是连续运行。
  • @Joey:TPL 专为这项工作而设计。但是,您应该知道,除非您的程序是“令人尴尬的可并行化”,否则并行化可能无济于事,实际上可能会使其变慢。有些作业天生就很容易并行化;如果您尝试分析一千张图像并尝试将每张图像识别为金门大桥或埃菲尔铁塔的图片,那么在每个核心上制作 500 张图像是一个好主意。如果您正在分析一个图像,那么在一个核心上做左半边,在另一个核心上做右半边是一个可怕的想法。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2011-04-09
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多