[Moscow.pm] POE::Filter::Line
Ruslan Zakirov
ruz ÎÁ bestpractical.com
ðÔ íÁÒ 28 17:33:25 PDT 2008
�абро�ал бенчмарк, но только про�тенький и по�ледн�� вер�и� в �лайдах
была �овершенно другой. �адею�ь подправите и вернете назад чтобы � мог
варианты ss1 и ss2 приве�ти к единому варианту ответа, пока они
отличают��.
amd64, gentoo, system malloc.
Rate re ss2 ss1
re 6381/s -- -51% -81%
ss2 12961/s 103% -- -62%
ss1 34367/s 439% 165% --
2008/3/17 Ivan B. Serezhkin <ivan ÎÁ serezhkin.com>:
> Привет.
> Может кому и интере�но ?
> получил приро� в 25 раз на больших файлах.
> Можете поругать �тиль =)
> �а очереди �делать нормальный бы�трый драйвер.
> И к�тати, �то удобный темплейт дл� напи�ани� �воих фильтров, например
> POE::Filter::Log::Postfix =)
> И�пользовать так:
>
> Wheel ...
> Driver => POE::Driver::SysRW->new( BlockSize => 256*1024*1024) ,
> Filter => POE::Filter::Regexp->new(qr/RecordSeparator/),
> ....
>
>
>
> package POE::Filter::Regexp;
> use strict;
>
> sub new {
> my ($class,$re)=@_;
> $re ||= qr/\n/;
> die "Param in new must be a Regexp but this is a ".ref($re) unless ref
> $re eq 'Regexp';
> return bless [
> '', # raw unparsed data
> [], # ready queue
> $re,
> ], $class;
> }
>
> sub get {
> my ($self, $stream) = @_;
> my @ret;
> while($self->[0].=shift @$stream){
> my $p=0;
> while($self->[0]=~/$self->[2]/g) {
> next unless $-[0]; #begin of stream
> push @ret, substr($self->[0], $p, $-[0]-$p);
> $p=$-[0];
> }
> substr($self->[0], 0, $p)=undef;
> }
> return \@ret;
> }
> 1;
>
> --
> Ivan B. Serezhkin
>
> --
> Moscow.pm mailing list
> moscow-pm ÎÁ pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm
--
Best regards, Ruslan.
----------- ÓÌÅÄÕÝÁÑ ÞÁÓÔØ -----------
Вложение не в текÑ�товом формате было извлечено…
Им� : poe_filter_split.pl
Тип : application/x-perl
Размер : 1978 байтов
Опи�ание: от�ут�твует
Url : http://mail.pm.org/pipermail/moscow-pm/attachments/20080329/62458892/attachment.bin
ðÏÄÒÏÂÎÁÑ ÉÎÆÏÒÍÁÃÉÑ Ï ÓÐÉÓËÅ ÒÁÓÓÙÌËÉ Moscow-pm