Привет,

Полнейшее расстройство от производительности autodie.

Как раз сейчас на p5p в теме про implicit close обсуждается тема связаная с
autodie. В perl есть проблема, что если неявный close выполняется с
ошибкой, то программист никогда не увидит эту ошибку.

В процессе обсуждения было предложено решение добавить управление
обработкой ошибок как свойства handle'ов, что-то типа $fh->on_error('die')
или $fh->on_error('warn') с лексической прагмой для установки дефолтных
значений, что-то типа use open::on_error 'die'; Данное решение особого
энтузиазма не вызвало, но мне понравилось тем, что может решить проблему и
заменить autodie более быстрой реализацией внутри ядра. Для того, чтобы оно
появилось в ядре нужно продумать API, обсудить в листе p5p, реализовать и
будет оно в 5.20 и/или модулем на CPAN (не знаю можно ли будет портировать
решение на старые версии через модуль совместимости).


2013/6/18 Denis Evdokimov <[email protected]>

> Мои 5 копеек.
>
> # opendir; closedir;
>
> time perl -e'for(0..1000000){opendir(my $dir, "/usr") or die; closedir
> $dir or die;}'
> real    0m2.707s
> user    0m1.484s
> sys    0m1.192s
>
> time perl -e'use autodie; for(0..1000000){opendir(my $dir, "/usr");
> closedir $dir;}'
> real    0m19.668s
> user    0m17.625s
> sys    0m1.948s
>
>
> # chdir; chdir;
>
> time perl -e'for(0..1000000){chdir "/usr" or die; chdir "/tmp" or die;}'
> real    0m0.849s
> user    0m0.112s
> sys    0m0.732s
>
> time perl -e'use autodie; for(0..1000000){chdir "/usr"; chdir "/tmp"}'
> real    0m15.357s
> user    0m14.037s
> sys    0m1.304s
>
> # А вот тут мы убеждаемся, что замедляется работа, а не старт
> time perl -e'use autodie; for(0..1){chdir "/usr"; chdir "/tmp"}'
>
> real    0m0.052s
> user    0m0.052s
> sys    0m0.000s
>
> P.S. А я так надеялся, что проблема в способе тестирования ((((
>
>
> 17 июня 2013 г., 17:49 пользователь Ruslan Zakirov 
> <[email protected]>написал:
>
>>
>> 2013/6/17 Vladimir Timofeev <[email protected]>
>>
>>> autodie on:  3 wallclock secs ( 1.92 usr +  0.17 sys =  2.09 CPU) @
>>> 149655.50/s (n=312780)
>>> Benchmark: running autodie off for at least 2 CPU seconds...
>>> autodie off:  1 wallclock secs ( 1.18 usr +  0.89 sys =  2.07 CPU) @
>>> 1755538.65/s (n=3633965)
>>>
>>
>> Я не увидел разницу в количестве цифр. Мне показалось, что порядок 2
>> раза, а не 20. Тады ой и грустно.
>>
>>
>> --
>> Best regards, Ruslan.
>>
>> --
>> Moscow.pm mailing list
>> [email protected] | http://moscow.pm.org
>>
>>
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
>


-- 
Best regards, Ruslan.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить