Size: a a a

2020 April 10

AP

Anton Petrusevich in Modern::Perl
коро — он чисто про стейт интерпретатора, остальное уже вокруг
источник

AP

Anton Petrusevich in Modern::Perl
allter
Кстати, в Coro, всё-таки, есть поддержка тредов операционной системы? Когда-то изучал, но забыл. Это сильное утверждение в начале перлдока по Coro ("the only real threads in perl") очень сильно сбивает.
вот такое есть: https://metacpan.org/pod/Coro::Multicore
источник

b

basiliscos in Modern::Perl
> Coro::Multicore - make coro threads on multiple cores with specially supported modules

"with specially supported modules" как бы намекает, что работать не будет, в общем случае.
источник

AP

Anton Petrusevich in Modern::Perl
я сам ни разу не пользовался, не могу про мультикоре проконсультировать
источник

VG

Vadim Goncharov in Modern::Perl
всё-таки кондвары в АЕ - форменное блядство, если я отправляю синхронным воркерам запрос и делаю send на первом удачном, у остальных ляжет в очередь и вывалится мне в другой раз, портя потом мне поток

for my $layer (sort { $b <=> $a } keys %whohas) {
   AE::log info => "trying to decode layer $layer";
   $spin->begin;
   $decoders{$layer}->{proc}->('tl_unpack_obj', $hash, $stream, sub {
           my ($consumed, $obj) = @_;
           AE::log debug => "decoder $layer returned consumed=$consumed obj=%s", defined $obj ? ref $obj : 'undef';

           if ($consumed && $obj) {
               $ext_obj = $obj;
               $successful = $layer;
               $spin->send($consumed);
           } else {
               AE::log error => "decoder $layer has hash but failed decode";
               delete $whohas{$layer};
               $spin->end;
           }
       });
}
my $trim = $spin->recv;

вот шо мне теперь, на каждого отдельный condvar заводить?!
источник

AP

Anton Petrusevich in Modern::Perl
кондвары в АЕ надо понимать как пользовать. рецв без коро им противопоказан
источник

b

basiliscos in Modern::Perl
Или возми Future, они компонуются нормально, в развесистые if/else/cancel иерархии
источник

VG

Vadim Goncharov in Modern::Perl
там выше был похожий цикл с опросом и begin/end, но возвращают все - работает норм, только еще один кондвар надо иметь
источник

b

basiliscos in Modern::Perl
Проблема с cv, что они плохо/ограниченно компонуюся.
источник

VG

Vadim Goncharov in Modern::Perl
но один барьер ладно, а в цикле - это что-то за гранью уже
источник

VG

Vadim Goncharov in Modern::Perl
basiliscos
Или возми Future, они компонуются нормально, в развесистые if/else/cancel иерархии
а циклы в них есть? :)
источник

VG

Vadim Goncharov in Modern::Perl
ну и это просто языковая обертка, а не IPC-средство, насколько я помню
источник

b

basiliscos in Modern::Perl
my $f = Future->needs_all($f1,$f2, ... $fn); - ждет все фьючи, или пока 1 из них не сфелится
my $g = Future->waits_all($f1, $f2, ... $n); - ждет все фьючи (закончилась либо сфэйлилась)
источник

VG

Vadim Goncharov in Modern::Perl
а "первый успешный, остальные даже не запускать" есть? :)
источник

b

basiliscos in Modern::Perl
Vadim Goncharov
ну и это просто языковая обертка, а не IPC-средство, насколько я помню
там под капотом, например в Future::AnyEvent (или как-то так), всё-тавно что-то вроде
$loop->run_once() unless $something_happen_in_a_future - т.е. тот же AE::CV, расширенный
источник

AP

Anton Petrusevich in Modern::Perl
промисы — это недо-коро
источник

b

basiliscos in Modern::Perl
Vadim Goncharov
а "первый успешный, остальные даже не запускать" есть? :)
my $f = $f1->then($f2, f3, ...);
$f->get;
источник

AP

Anton Petrusevich in Modern::Perl
нахрена брать недо-коро, когда уже есть коро?
источник

a

allter in Modern::Perl
Anton Petrusevich
промисы — это недо-коро
Промисы - это почти нормальные монады, с которыми можно делать что хочешь. Но вроде все промисы, которые есть в Perl имеют небезопасные подводные камни наподобие пресловутого рекурсивного вызова кондвара.
источник

AP

Anton Petrusevich in Modern::Perl
короче, делайте что хотите :)
источник