首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务并行库-单核并行

任务并行库-单核并行
EN

Stack Overflow用户
提问于 2012-08-27 18:25:41
回答 3查看 2.5K关注 0票数 2

我正在开发一个WPF应用程序。

在屏幕/视图中,我必须对WCF服务进行6次调用。这些调用都不相关,因为它们既不共享数据,也不相互依赖。我计划使用TPL,并将这6个WCF服务调用作为6个任务。现在,应用程序可以部署在单核计算机上,也可以部署在多核计算机上。

有人告诉我,在单核机器上使用TPL实际上会增加完成任务所需的时间,因为cpu调度器在对不同任务进行时间拼接时会产生开销。这是真的吗。如果是,我应该继续我的设计,还是应该寻找替代方案。

如果我必须考虑替代方案,那么这些替代方案是什么:)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-27 18:42:19

在执行CPU密集型任务时,在单核计算机上运行并行线程会增加开销。

在您的例子中,任务不是CPU密集型的,它们在等待服务调用响应,因此您可以很好地在单核计算机上运行并行线程。

根据服务器处理调用的方式,可能不会增加任何时间。如果调用在服务器上排队,则运行所有调用所需的时间大致相同。在这种情况下,按顺序运行调用会更好,因为这样更简单。

票数 5
EN

Stack Overflow用户

发布于 2012-10-17 13:54:59

您最好的选择是使用多核和单核进行性能分析。大多数bios都可以设置活动核心的数量,所以这应该不是一个大问题。你可以做一些模拟测试,看看它是否适用于你。

显然,使用任务切换存在开销问题,但只要每个任务的时间比设置时间长得多,您就不会注意到这一点。

有许多方法可以实现多任务行为,如果您不知道哪种是最好的,那么很可能您需要实际编写一些测试用例并进行一些分析。这并不难做到。如果您只是简单地尝试使用多核系统,那么使用最新版本的.NET通常非常容易,您甚至可以将其设置为使用多核,但通过使用适当的构造可以恢复到单核。

例如,异步/等待模式可以通过使用#ifdef或删除所有等待关键字(使用搜索和替换工具)轻松地同步运行。无论是直接还是通过更改MaxDegreeOfParallelismParallel.For循环都可以很容易地转换为普通的for循环。任务可以很容易地同步运行。

如果你想让它更透明,你可以使用一些预处理脚本,比如T4。

票数 3
EN

Stack Overflow用户

发布于 2012-08-27 18:57:19

通常,当在单核上运行多个线程时,速度会变慢,因为它会在线程之间进行上下文切换。

我认为下面的图表将解释其中的区别:

如图所示,单核上运行4个线程,第一次是多任务,第二次是顺序。

您可以看到,在多任务处理中,所有线程的完成时间都比顺序任务晚。

在您的特定情况下,可能不会相同,我认为@Guffa的答案是正确的,因为它涉及WCF调用

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12140201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档