有多少并行进程?

时间:2016-03-01 23:43:21

标签: perl concurrency parallel-processing fork

我在perl中使用名为Parallel::ForkManager的分叉模块并行运行一些代码。我目前已将最大处理数设置为30

my $pm = Parallel::ForkManager->new(30);

建议的最大进程数是多少?我在商业级Solaris服务器上这样做,但我仍然不想让系统过载。

3 个答案:

答案 0 :(得分:5)

在下载文件时,这实际上取决于

  1. 您要下载多少个不同的主机,
  2. 与最大带宽相比,它们会为您提供所需文件的速度。
  3. 如果您要将文件从一台计算机下载到本地网络上的一台计算机,则2-3最大值。如果您从互联网上的30个不同的服务器下载文件,所有这些都很慢,但是你有一个胖管道,那么30可能是合理的。

    这里没有一个普遍正确的答案。除非你算“这取决于。”

答案 1 :(得分:4)

提到了“下载文件”的目的,但是在不久前的评论中我提出了问题,也更为一般。

唯一相关的衡量标准是当您开始达到性能提升饱和度时,使用该系统上的特定软件。正式的限制是巨大的,毫无意义,而经验法则非常普遍。

让我们假设运行10个进程,完成作业的时间减少10次。增加到20个进程,时间减少20次 - 但是对于30个进程,增益是10倍。此时我们已经加载了系统。进一步推动,性能将迅速降低,并为每个人。此时,服务器 过载,即使它允许每个用户1024个进程(实际上是服务器的10个或更多倍)。

每个核心都有几个进程,机器正在使用,我会说这是一个很好的经验法则。但是,它太笼统了。考虑到影响它的许多其他因素,我怀疑你通过这么多过程获得了很多性能。

访问一个Web服务器服务器的功能就是福音。他们可能已经发布了他们满意的每秒请求数量。或者他们可能对每个用户的进程数量有限制,例如10或20.如果这意味着许多同时下载,则这是您的限制。但我要小心 - 如果网站接近且快速,请求可能会在0.1或0.2秒内完成。然后,通过10个进程,您可能每秒100次点击服务器。我不推荐。如果没有信息,我会说每秒保留几个请求。性能和服务器负载也取决于内容 - 大量下载与拉动许多瘦小的网页不同。您身边的I / O可能很重要,但我希望服务器设置限制。如果您打算使用他们的服务,为什么不发送电子邮件并询问他们可以使用什么。

I / O,网络(许多服务器)或磁盘对于网络,性能取决于路径中的每个硬件以及软件。没有尝试,没有人能说出来。磁盘I / O非常复杂。为了增加麻烦,目前还不清楚它是你的磁盘还是网络是瓶颈。我希望在几十个进程中可以获得明显的性能提升,而且可能更少。

CPU或内存限制这可能是最简单的 - 可以在30个核心上并行分解的处理可以享受接近30倍的加速(没有其他瓶颈)。超出内核数量显然会导致性能降低。并发(但不是并行)处理要复杂得多。如果你的代码是内存密集型的,那就完全不同了。

评估上述组件的有用基本工具包括iostat -xznnetstat -Ivmstat。但是学习如何解释它们的输出有一点曲线,希望它不会出现这种情况。

结论是你必须计时。带上您的实际应用程序,并在一个过程中运行它。这样做3到5次,看看平均值(丢掉明显的异常值)。然后重复5个过程,然后重复10个等等。我预计趋势将比你提到的30个处理器更快地开始减速。一旦它到达,系统就会被加载,并且任何人都会注意到它。在此之后不久,性能可能会迅速降低。适当的基准测试工具,如Benchmark,要复杂得多,但这可能很好地解决了这个问题。如果您看到奇怪或不一致的行为,您可能需要深入了解细节,从上面提到的工具开始。

重载”意味着有点不清楚。在其他人受到影响之前,我喜欢限制我对资源的使用。但有可能推动它,特别是如果你可以在安静的时候跑步。我怀疑你会不断获得可用处理器的数量。

因此,如果你第一次做事,就不用担心“重载”服务器了。性能限制将告诉您何时停止。我会说你的限制是30非常合理。除非这真的是关于下载文件,否则Web服务器可能非常重要。

答案 2 :(得分:0)

您应该将最大进程数设置为60。