YK
use Plack::Builder;
use EV;
my $app = sub ($env) { sub ($res) {
my $w; $w = EV::timer 0.1, 0, sub {
$res->([200, [qw'content-type text/plain'], ['whatever']]);
undef $w;
};
}};
builder { mount '/' => $app }
и аналог на mojo:
use Mojolicious::Lite -signatures;
use Mojo::IOLoop;
get '/' => sub ($c) {
Mojo::IOLoop->timer(0.1 => sub ($loop) {
$c->render(qw'text whatever');
});
};
app->start;
запускаем на unix socket за nginx-ом
грузим трафом:
mojo prefork:
Running 10s test @ http://localhost:5000/
1 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.06s 139.13ms 1.44s 69.79%
Req/Sec 1.57k 1.41k 6.22k 73.81%
9000 requests in 10.10s, 1.44MB read
Requests/sec: 891.43
Transfer/sec: 146.25KB
plack feersum:
Running 10s test @ http://localhost:5000/
1 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 110.44ms 6.45ms 164.93ms 78.69%
Req/Sec 9.09k 647.15 10.01k 85.71%
89146 requests in 10.01s, 13.18MB read
Requests/sec: 8909.34
Transfer/sec: 1.32MB
прирост ~ 10x, в реальности будет меньше - уже зависит от кода приложения