[Moscow.pm] Coro

Dmitry Karasik dmitry на karasik.eu.org
Чт Янв 26 09:10:27 PST 2012


On Thu, Jan 26, 2012 at 05:37:24PM +0200, Alexandr Gomoliako wrote:
> > 1: что если sysread/syswrite не смогут записать/прочитать все сразу -
> > требуется
> > повторный вызов ::io
> 
> Колбэк вызывается все время, пока $fh readable/writable.

это интересно ... значит ли это что вот в такой конструкции

    $w = AE::io $fh, 0, $read;
    ...
    $read = sub {
        my $len = sysread $fh, $buf, ...;

        if ($len) {
            $t = AE::timer 15, 1, $write_timeout;
            $w = AE::io $fh, 0, $write;
            &$write();
            ...
        } elsif (...) {
            ...
            &$end();
        }
    } 

когда активированы и $read и $write, а сокет будет одновременно читабельным и писабельным,
порядок вызова коллбэков не определен? или грубо, мы вызвали

            $w = AE::io $fh, 0, $write;

а оно вызовет $read?  

> > 2: что если http нужно заменить на https , в котором sysread/syswrite уже
> > просто
> > так не катит (т.к. для неблокирущего IO::Socket::SSL требуется шаманство)
> 
> Для этого нужно делать обертку для sysread()/syswrite() или будет сложно.

Конечно нужно ;) Вы попробуйте, попробуйте, там весьма интересно ) Например,
по протоколу нужно уже читать, а SSL layer говорит, нет мол, нужно дописать
сначала. Потому что у него обернут select, который допишет шифрованные данные из буфера,
а потом уж можно и читать )))

> > 3: наконец, линейность в коде внизу, какбы, не такая уж и линейная.
> Ну тогда и линейность лямбды как-бы не такая уж и линейная тоже :)

Линейнее голых коллбэков 100%, для того и делалась. Как я уж говорил,
IO::Lambda сравнивать с AE некорректно, это разные весовые категории -
возможности первого больше чем просто коллбэки. Да, если вам надо простой
протокол, их и хватит. Если же надо много структурированных протоколов с
униформным интерфейсом, тогда коллбэки будут кошмаром в коде. 

Это не считая того что IO::Lambda умеет не только IO, вобщем то - там и
поллинг, и треды (привет Леману :), и неблокирующий flock как коллбэк, и
чужеродные лупы типа SNMP которые вообще ни с кем не умеют дружить, и все это
под одним интерфейсом.  И еще куча всего. Да, это надстройка и новый синтаксис.
Ну так что ж, у C тоже был новый синтаксис по сравнению с ассемблером :)

-- 
Sincerely,
	Dmitry Karasik



Подробная информация о списке рассылки Moscow-pm