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

Multithreading 使用Perl中的每个窗口实现更高的Mbps,multithreading,perl,Multithreading,Perl,因此,我托管了一个网站,以便对其进行安全测试,因此我用perl创建了一个脚本,该脚本将生成高达60-72 Mbps(信息)的发送。我注意到,如果我同时多次运行脚本,我将生成高达150 Mbps的数据 如何能够在不需要多次运行脚本的情况下实现150Mbps 谢谢大家! 您想打开多个TCP连接 您要么需要使用事件循环来处理使所有管道充满的来回操作,要么需要使用线程/进程。正如上面有人评论的那样,您可以使用“fork”创建脚本的多个副本,每个副本可以创建一个TCP连接并轻松保持连接完整。这可能是一个简

因此,我托管了一个网站,以便对其进行安全测试,因此我用perl创建了一个脚本,该脚本将生成高达60-72 Mbps(信息)的发送。我注意到,如果我同时多次运行脚本,我将生成高达150 Mbps的数据

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


谢谢大家!

您想打开多个TCP连接

您要么需要使用事件循环来处理使所有管道充满的来回操作,要么需要使用线程/进程。正如上面有人评论的那样,您可以使用“fork”创建脚本的多个副本,每个副本可以创建一个TCP连接并轻松保持连接完整。这可能是一个简单的解决方案

如果您想将程序保持为单个进程,则需要做更多的工作,但仍然是可能的

如果要打开大量连接,请阅读以下内容:


你也可以考虑使用像C或GO这样的更快的语言,因为使用Perl会涉及一些开销。(我会先做一个测试,也许开销可以忽略不计。通过使用像

curl
这样的工具来发送一个大文件,看看它是否比perl程序的带宽更高。)

正如评论所说,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();

我知道你想在每个窗口都获得更高的Mbps,我想你可能正在“前台”运行脚本,需要打开一个新窗口来启动另一个窗口。您可能需要做的一件事是在后台启动脚本

而不是

% your_script.pl
如果使用&运行,则无需启动更多窗口:

% your_script.pl &
% your_script.pl &
% your_script.pl &
...
有时,您必须执行一点重定向到/dev/null,如下所示:

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

使用fork生成更多进程