|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ilia Vinokurov 2:5020/400 17 Nov 2003 14:18:43 To : Yury Kopyl Subject : Re: Производительность ООП -------------------------------------------------------------------------------- Hello, Yury! You wrote to Ilia Vinokurov on Mon, 17 Nov 2003 09:44:38 +0000 (UTC): IV>> Hello, All! IV>> Возникла чуднАя мысль по поводу того, что программа, написанная в IV>> стиле ООП, будет работать медленнее аналога, написанного в старом IV>> стиле. Аргумент - Объекты строятся на хэше и т.п., который в IV>> принципе работает медленнее скаляров. YK> Читать Perl Object Programming. Проблессить можно любой тип переменных, YK> даже регулярные выражения. Это понятно. Хэш был выбран в качестве самого популярного решения :-) IV>> Обращаясь к свойствам объекта, мы все время осуществляем поиск в IV>> хэше, что должно сказаться на производительности. IV>> Каков ваш опыт ? YK> Взять железку помощнее. А что делать, если железки помощнее нету (не предлагать перебираться на Mac или AS400), а colocation кластерного решения слишком дорог ? Мораль следующая - быстрые алгоритмы еще никому не мешали :-) От нечего делать написал прогу: ------------------- Файл Test.pl ----------------------------- #!/usr/bin/perl -w use Benchmark; use TestOld; use TestOOP; use TestOOP2; my $op = TestOOP->new(); my $op2 = TestOOP2->new(); print timethis (100, sub { TestOld::testsub() }), "\n"; print timethis (100, sub { $op->testsub() }), "\n"; print timethis (100, sub { $op2->testsub() }), "\n"; --------------------------------------------------------------- Результаты: timethis 100: 12 wallclock secs (11.78 usr + 0.00 sys = 11.78 CPU) @ 8.49/s (n=100) timethis 100: 35 wallclock secs (28.58 usr + 0.00 sys = 28.58 CPU) @ 3.50/s (n=100) timethis 100: 28 wallclock secs (24.33 usr + 0.00 sys = 24.33 CPU) @ 4.11/s (n=100) Как видно из тестов - разница в два раза, что, несомненно, печально. ------------------- Файл TestOld.pm ----------------------------- package TestOld; my $var = 0; sub testsub{ for( my $i=1; $i<100000; $i++ ){ $var = $i; $var = $var/$var; }; }; 1; ------------------- Файл TestOOP.pm ----------------------------- package TestOOP; sub new{ my $class = shift; my $self = bless {}, $class; $self->{'var'} = 0; return $self; }; sub testsub{ my $self = $_[0]; for( my $i=1; $i<100000; $i++ ){ $self->{'var'} = $i; $self->{'var'} = $self->{'var'}/$self->{'var'}; }; }; 1; ------------------- Файл TestOOP2.pm ----------------------------- package TestOOP2; sub new{ my $class = shift; my $self = bless [], $class; $self->[0] = 0; return $self; }; sub testsub{ my $self = $_[0]; for( my $i=1; $i<100000; $i++ ){ $self->[0] = $i; $self->[0] = $self->[0]/$self->[0]; }; }; 1; ---------------------------------------------------------------- With best regards, Ilia Vinokurov1771273003. E-mail: ilvin@teleserv.ru --- ifmail v.2.15dev5.1 * Origin: Comcor (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/7808f91e00c3.html, оценка из 5, голосов 10
|