【发布时间】:2011-07-09 09:35:50
【问题描述】:
对于我的一个项目,那是一种内容聚合器,我想介绍并发性以及可能的并行性。乍一看,这似乎毫无意义,因为并发性和并行性采用不同的方法。 (通过线程的并发引入了即时并发,而并行提供了潜力)。
所以为了更好地解释我的问题,让我总结一下我的问题集。
由于我的项目是一个内容聚合器(聚合提要、播客和类似内容),它基本上从网络读取数据,解析它们以返回有意义的数据。
所以到目前为止,我采用了一种非常简单的顺序方法。假设我们需要解析一些提要。
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
因此,使用顺序方法解析所有提要并处理它们所花费的时间在很大程度上不仅取决于解析器代码,还取决于从 Web 获取 xml 源所需的时间。我们都知道从网络上读取源代码可能需要不同的时间(因为网络条件和类似问题)。
因此,为了加快代码速度,我可以采用工作线程的方法,这将引入即时并发;
因此,定义数量的工作线程可以同时接受馈送和解析(这肯定会加快整个过程 - 因为我们会看到通过网络等待数据的影响较小)。
这一切都还好,直到我的项目目标受众主要运行多核 cpu——因为他们是游戏玩家——。
我还想在处理内容时利用这些内核,因此开始阅读潜在的并行性http://oreilly.com/catalog/0790145310262。我还没有读完它,不知道这是否已经讨论过了,但我对此有点着迷,想通过stackoverflow询问一下总体思路。
因此,正如本书描述的潜在并行性:潜在并行性意味着您的程序被编写为在并行硬件可用且大致相同时运行得更快 作为等效的顺序程序当它不是时。
所以真正的问题是,当我使用工作线程进行并发时,我还能使用可能的并行性吗? (在工作线程上运行我的提要解析器并仍然将它们分配给 cpu 核心——如果 cpu 当然支持多核)
【问题讨论】:
-
我看不出区别。当多个内核可用时,工作线程并行执行
-
请问有这方面的资源吗?我想详细阅读这篇文章以获得更好的理解。
-
我同意这个;如果某件事是并行运行的,那么它正在同时发生。
-
那我换个说法;如果我使用并行扩展 Parallel.ForEach,因为代码在单核 cpu 上运行,此代码会同时运行还是仅作为顺序运行?如果稍后是答案,那么这对我来说不是解决方案,因为即使在单核平台上我也必须实现并发。
标签: c# multithreading concurrency parallel-processing