任务并行库 - 平行于单核(Task parallel library - Parallelism

2019-07-31 04:40发布

我工作在一个WPF应用程序。
在屏幕/查看我不得不作出6调用WCF服务。 这些电话都没有在他们没有共享数据,也不是他们彼此依赖感有关。 我打算使用TPL,使这6个WCF服务电话为6级的任务。 现在,应用程序可能会被部署在单核机或多个核心的机器上。

我被告知TPL的单核机器上使用实际上增加时承担的任务,因为这将被放置在CPU调度时间拼接不同任务的开销完成。 这是真的。 如果是的话,我应该还是继续我的设计或者我应该寻找替代。

如果我要寻找替代,那些是什么替代品:)?

Answer 1:

当做某事CPU密集型的,你将是单核的机器上运行的并行线程加入的开销。

你的情况的任务不是CPU密集型,他们正在等待一个服务呼叫响应,这样就可以很好的单核的机器上运行并行线程。

根据服务器如何处理来电,可能没有任何反正时间而增加。 如果调用服务器上排队,这将需要大约在同一时间仍要运行的所有呼叫。 在这种情况下,它会更好,运行序列中的电话,只是因为它的简单。



Answer 2:

最好的办法是使用多核心和单核心配置文件。 大多数BIOS的可以设置活动核心的数量,因此不应该是一个大问题。 你可以做一些模拟测试,以找出是否它会为你工作。

显然,使用任务切换的开销有问题,但只要每个任务的时间比设定时间更长的时间,你不会注意到它。

有实现多任务处理行为的许多方面,如果你不知道哪个是最好的那么很可能你需要实际编写一些测试情况,并做一些分析。 这并不难做到。 如果你只是想利用多核系统则通常是使用.NET的最新版本很容易的,你甚至可以将它设置为多核心,但通过采用适当的结构恢复到单核心。

异步/ AWAIT图案,例如,可以很容易地通过同步或者使用跑#ifdef或移除所有等待的关键字(与搜索和替换工具)。 Parallel.For环易于转换到正常for直接环路或者通过改变MaxDegreeOfParallelism 。 任务可以很容易地同步运行。

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



Answer 3:

一般情况下,当运行在单核多线程它会慢一些,因为它具有在螺纹之间上下文切换。

我想下面的图将解释你的区别:

正如你所看到的图是指在单核心,首次在多任务处理和第二次连续运行4个线程。

你可以看到,在多任务的所有线程将比顺序任务以后的时间完成。

在您的具体情况可能会不一样,我认为@Guffa是正确的,因为它涉及到WCF调用他的回答



文章来源: Task parallel library - Parallelism on single core