2017-09-25 67 views
2

我想并行运行100个网络(非CPU密集型)作业,并且想要了解最佳方法。使用xargs启动并行网络任务,同时最小化上下文切换开销

特别是有可能使用xargs运行100多个作业,有什么缺点?

我知道有一点,有更多的上下文切换正在完成,然后实际的数据包处理。 如何理解该点的位置以及将其最小化的最佳方法是什么?

例如,是否有更好的工具来使用其他的xargs等?

+0

就遍历所有的文件,并要求每个功能?这只是一个循环。 –

+0

@MartijnPieters我更新了帖子,使目标更清晰。主要关心的是启动100多个网络作业的可行性,同时最大限度地减少上下文切换开销。 – GNettlefold

+0

我有点觉得这可能太宽泛了,但我仍然重新打开。 –

回答

1

更好的往往是品味的问题。

使用GNU并行,你可以做这样的事情来获取并行100张图片:如果你想从100台服务器上的数据

seq 1000 | parallel -j100 wget https://foo.bar/image{}.jpg 

,每次你得到一个完整的一行:

parallel -a servers.txt -j0 --line-buffer my_connect {} 

或者:

parallel -a servers.txt -j0 --line-buffer --tag my_connect {} 

GNU Parallel是一个通用的并行器,可以很容易地并行运行作业o在同一台机器上或在您拥有ssh访问权限的多台机器上。

如果你想在4个CPU上运行32个不同的工作岗位,并行化直接的方式是在每个CPU上运行8个作业:

Simple scheduling

GNU并行,而不是产生一个新的进程时,一个完成 - 保持CPU的活跃,从而节省了时间:

GNU Parallel scheduling

安装

出于安全考虑,您应该在您的软件包管理器中安装GNU Parallel,但是如果您的发行版没有打包GNU Parallel,则可以进行个人安装,而不需要root权限。它可以在10秒内通过这样来完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

对于其他安装选项见http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多的例子:http://www.gnu.org/software/parallel/man.html

观看介绍视频: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

走过t他教程:http://www.gnu.org/software/parallel/parallel_tutorial.html

订阅邮件列表,以获得支持:https://lists.gnu.org/mailman/listinfo/parallel

+0

感谢您的回复Ole。我对你的一个问题是,如果这对长时间运行的工作也适用?那是一个未定义的寿命(例如web服务器)。 – GNettlefold

+0

您可能需要更具体。你要并行运行100个Web服务器吗? –

+0

我想要消耗大约100个数据流的数据。其中约80人每2秒发生一次事件,其余20人每秒发生一次事件。数据流是连续的,但永远不会结束。 – GNettlefold

相关问题