我是Perl 5异步流程的新手,并且发现令人兴奋的是,CPAN提供了类似的支持,我们可以在Node.js中使用AnyEvent,IO :: Async等进行类似的支持.但是,本教程提供了一些复杂内容的示例.我需要的只是使用AnyEvent并行运行外部系统命令.
我是否在下面的示例中正确地执行了异步压缩多个文件?请不要担心运行系统命令zip而不是使用CPAN模块; 这个例子纯粹是为了演示运行异步进程的想法......
#!/bin/env perl
use strict; 
use AnyEvent;
use AnyEvent::Util;
my $s1    = time;
my $quit_program = AnyEvent->condvar(
    cb => sub {
        warn "Done async";
    }
);
my $result;
$quit_program->begin( sub { shift->send($result) } );
for my $file (@files) {
    $quit_program->begin;
    my $cv; $cv = run_cmd [qw(zip), "${file}.zip", $file],
                "<" , "/dev/null",
                ">" , "/dev/null",
                "2>", "/dev/null";
    $cv->cb (sub {
        shift->recv and die "command failed";
        # undef $cv;
        $quit_program->end;
    }); …嗨,我构建了一个非常简单的HTTP服务器,只对POE模块进行压力测试.
这是我测试它的方式:
for x in {1..10000}; do
  curl xxxxx:12342 --retry-delay 5 --retry 3 -d randombytes$x 
done
当我这样做时,我通过对等消息看到多个"连接重置",因此对于这个10k连接,我总共丢失了大约1200个请求.
反正有没有提高它的表现?在同一台服务器上测试了nginx,在此期间没有更改内核参数,根本没有连接重置消息.
编辑
我已经增加了max fileno/per user max fileno,前者是fs.file-max = 3246455,而后者是10240
附加源代码:
use strict;
use warnings;
use feature 'say';
use Net::Async::HTTP::Server;
use IO::Async::Loop;
use HTTP::Request;
use HTTP::Response;
use Data::Dumper;
my $loop = IO::Async::Loop->new();
my $httpserver = Net::Async::HTTP::Server->new(
    on_request => sub {
        my ($self, $req) = @_;
        my ($code, $result) = (200, "It works\n");
        my $response = HTTP::Response->new ($code);
        $response->add_content ($result);
        $response->content_type ("application/json"); …