使用Perl中的每个窗口实现更高的Mbps

时间:2013-05-18 19:04:42

标签: multithreading perl

所以我主持了一个网站,目的是对它进行安全测试,所以我在perl中创建了一个脚本,可以生成高达60-72 Mbps(信息)的发送。我注意到如果我同时多次运行脚本,我将产生高达150 Mbps的速度。

如何能够在不需要多次运行脚本的情况下实现150 Mbps的速度?

谢谢!

3 个答案:

答案 0 :(得分:2)

您想要打开多个TCP连接。

您需要使用一个事件循环来处理保持所有管道已满的来回,或者需要使用线程/进程。如上所述,您可以使用' fork'要制作脚本的多个副本,每个副本可以建立一个TCP连接并轻松保持连接完整。这可能是一个简单的解决方案。

如果你想把你的程序保持为一个单一的过程,那么它可以做多一点工作,但仍然可以。

如果您要打开很多连接,请阅读以下内容:http://www.kegel.com/c10k.html

您可能还会考虑使用更快的语言,如C或Go,因为使用perl确实会涉及一些开销。 (我先做一个测试,也许开销可以忽略不计。通过使用像curl这样的工具测试来发送一个大文件来查看它是否比你的perl程序获得更高的带宽。)

答案 1 :(得分:0)

正如评论所说,fork()会这样做。

您当前的剧本:

#!/usr/bin/perl

generate_some_load();

添加fork:

#!/usr/bin/perl

fork();   # now there are two processes running

generate_some_load();

或者如果你想开始一堆

#!/usr/bin/perl

my $num_to_start = 10;

while($num_to_start-- > 0 && fork() != 0) { 

}

generate_some_load();

答案 2 :(得分:0)

我看到你希望每个窗口都能达到更高的Mbps,我可能会在“前台”中运行脚本并需要打开一个新窗口来启动其他窗口。您可能想要做的一件事是在后台启动脚本。

而不是

% your_script.pl

如果你和&你不必开始更多的窗户:

% your_script.pl &
% your_script.pl &
% your_script.pl &
...

有时您需要对/ dev / null进行一些重定向,如下所示:

% your_script.pl > /dev/null 2>&1 &