Size: a a a

2021 April 15

YK

Yegor K in Modern::Perl
ну вот раскопал бенчмарк для примера - асинхронное приложение на plack:
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, в реальности будет меньше - уже зависит от кода приложения
источник

VG

Vadim Goncharov in Modern::Perl
зачем?
источник

W

Warstone in Modern::Perl
Очень странно.... На каком калькуляторе? Когда я mojo дергал на среднем компе он выдавал 20-30К RPS
источник

W

Warstone in Modern::Perl
Впрочем вы можете еще подождать... UniEvent::HTTP выдает около 100К RPS
источник

AK

Andrey Konovalov in Modern::Perl
Чтобы ты в принципе не смог делать никакой синхронный ввод-вывод при наличии хотя бы 2-х зелёных потоков, очевидно же, не?
источник

W

Warstone in Modern::Perl
Идите в Го с навязыванием парадигмы.
источник

AK

Andrey Konovalov in Modern::Perl
Чтобы весь ввод-вывод был асинком и только вырожеднный случай с одним потоком приводил бы к традиционному поведению
источник

VG

Vadim Goncharov in Modern::Perl
занахера?
источник

AK

Andrey Konovalov in Modern::Perl
Так это единственная нормальная парадигма
источник

YK

Yegor K in Modern::Perl
ну это 1 воркер на core i5
источник

AK

Andrey Konovalov in Modern::Perl
И в Coro она и есть
источник

VG

Vadim Goncharov in Modern::Perl
да щаз
источник

W

Warstone in Modern::Perl
Продолжайте так думать
источник

VG

Vadim Goncharov in Modern::Perl
разве Coro клепает каналы почем зря?
источник

AK

Andrey Konovalov in Modern::Perl
Ну да, да, как сейчас на perl - пипец удобно
источник

W

Warstone in Modern::Perl
Я не люблю быть солидарным с Вадимом, но это тот случай, когда я солидарен.
источник

AK

Andrey Konovalov in Modern::Perl
Я ничего не говорил о каналах. Но в Go они нужны из-за NxM, там корутины могут исполняться параллельно
источник

VG

Vadim Goncharov in Modern::Perl
йопта, каналы - неотъемлемая часть парадигмы Go
источник

AK

Andrey Konovalov in Modern::Perl
Йопта, а зелёные потоки не только в Go
источник

AK

Andrey Konovalov in Modern::Perl
Дурак Вы, Ваше Величество
источник