Автор Тема: Быстродействие и эффективность скрипта  (Прочитано 2888 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн puh

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
Вот ковыряюсь я с Perl\'ом уже не первый месяц, что-то стал наконец понимать и задался вопросом:
А от чего зависит быстродействие скрипта?
Ну, например, если я использую подключаемые модули (типа CGI или IO::Socket), или даже просто подключаю свой же файл-template тормозит ли это систему? Может лучше все в одном файле помещать?
© Винни-Пух

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Быстродействие и эффективность скрипта
« Ответ #1 : 14 Февраля 2002, 09:21:27 »
perldoc Benchmark
2B OR NOT 2B = FF

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
хы
« Ответ #2 : 15 Февраля 2002, 14:50:50 »
Цитировать
perldoc Benchmark

;) оч. сомнительная помощь :D
тесты конечно хорошо, но ... не все же тестить,тестить, тестить?

Где то я книжку англ. видел "Эффективное программирование на Perl". А на русском нет :(
 в исканиях.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
пример
« Ответ #3 : 15 Февраля 2002, 14:55:34 »
вот например, я тут тестировал на днях:

Benchmark: timing 10 iterations of FOREACH, MAP...
   FOREACH: 18 wallclock secs (18.01 usr +  0.00 sys = 18.01 CPU) @  0.56/s (n=10)
       MAP:  1 wallclock secs ( 1.81 usr +  0.00 sys =  1.81 CPU) @  5.52/s (n=10)

        s/iter FOREACH     MAP
FOREACH   1.80      --    -90%
MAP      0.181    895%      --

Вроде бы судя по тестам конструкция с map намного предпочтительней...


А вот код:

#!/usr/bin/perl -w
use Benchmark;
#---------------------------
#Green Kakadu map vs foreach
#---------------------------

@array=();
@t=();
$array[0]=undef;
for my $i (1..10000){
        push @array, $i;
}      

Benchmark::cmpthese (10, {
    \'FOREACH\'   => sub {&classic},
    \'MAP\' => sub {&map_me},
});


sub classic {
#--------------------------------------
foreach my $i (@array){
        push @t, $i if defined $i;
}      
undef @t;      
}      

sub map_me {
#--------------------------------------
map{ push @t, $_ if defined $_} @array;
undef @t;
#хотя тут стоило бы написать более корректно:
#@t=map{$_ if defined $_} @array;
}
 в исканиях.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Быстродействие и эффективность скрипта
« Ответ #4 : 15 Февраля 2002, 15:58:22 »
Цитировать
оч. сомнительная помощь

:)
Был вопрос:
Цитировать
Ну, например, если я использую подключаемые модули (типа CGI или IO::Socket), или даже просто подключаю свой же файл-template тормозит ли это систему? Может лучше все в одном файле помещать?

Сложно проверить оба варианта, да?
:)
А вообще это достаточно большая тема и основное в ней скорее опыт программирования и знание особенностей языка.
Как правило при возрастании опыта написания программ они становяться менее ресурсоемкими, хотя на данном пути бывают и исключения.
2B OR NOT 2B = FF

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Быстродействие и эффективность скрипта
« Ответ #5 : 15 Февраля 2002, 16:07:27 »
Цитировать

вот например, я тут тестировал на днях:

Benchmark: timing 10 iterations of FOREACH, MAP...
FOREACH: 18 wallclock secs (18.01 usr + 0.00 sys = 18.01 CPU) @ 0.56/s (n=10)
MAP: 1 wallclock secs ( 1.81 usr + 0.00 sys = 1.81 CPU) @ 5.52/s (n=10)

s/iter FOREACH MAP
FOREACH 1.80 -- -90%
MAP 0.181 895% --

Вроде бы судя по тестам конструкция с map намного предпочтительней...

У меня получился совершенно обратный результат на том же скрипте:
---------- Perl Run ----------
Benchmark: timing 10 iterations of FOREACH, MAP...
   FOREACH:  1 wallclock secs ( 1.21 usr +  0.00 sys =  1.21 CPU) @  8.26/s (n=10)
       MAP:  3 wallclock secs ( 2.75 usr +  0.00 sys =  2.75 CPU) @  3.64/s (n=10)
          Rate     MAP FOREACH
MAP     3.64/s      --    -56%
FOREACH 8.26/s    127%      --
Normal Termination
Output completed (5 sec consumed).

Приходим к зависимости от ОС, версий и реализаций Перла.:))
2B OR NOT 2B = FF

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
угу
« Ответ #6 : 15 Февраля 2002, 17:14:46 »
Цитировать
Приходим к зависимости от ОС, версий и реализаций Перла.

угу у меня были такие подозрения + встречал в конференции тесты о том, что мол map проигрывает foreach
(результаты того что я привел под ActivePerl под win ;))
а под linux все действительно иначе).

причем картина прямо таки совсем противоположная :) и как тут оценить эффективность скрипта?

Пока, наиболее действенные примеры и способы я нашел в книге "Регулярные Выражения"
 в исканиях.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Быстродействие и эффективность скрипта
« Ответ #7 : 15 Февраля 2002, 17:58:14 »
Цитировать

результаты того что я привел под ActivePerl под win

Аналогично.
2B OR NOT 2B = FF

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
ого
« Ответ #8 : 15 Февраля 2002, 18:12:39 »
Цитировать
Аналогично.

м-да. у меня w98 была.
А вот результаты под linux  (100 итераций, foreach все равно выигрывает)

Benchmark: timing 100 iterations of FOREACH, MAP...
   FOREACH: 14 wallclock secs (13.64 usr +  0.03 sys = 13.67 CPU) @  7.32/s (n=100)
       MAP: 18 wallclock secs ( 18.01 usr +  0.00 sys =  18.01 CPU) @  5.55/s (n=100)

        s/iter     MAP     FOREACH
MAP      5.55/s    --       -24%
FOREACH  7.32/s    32%      --
 в исканиях.

Оффлайн puh

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
Быстродействие и эффективность скрипта
« Ответ #9 : 15 Февраля 2002, 18:22:20 »
Спасибо, буду копать дальше...
[подумал он и поразился опыту и начитанности собеседников]
© Винни-Пух

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Во, почти к теме
« Ответ #10 : 16 Февраля 2002, 02:23:22 »
На Perl.com появилась статья: Optimizing Your Perl
http://www.perl.com/pub/a/2002/02/12/bigo.html?page=1
весьма познавательно
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28