Автор Тема: эффективность использования eval?  (Прочитано 4657 раз)

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

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
эффективность использования eval?
« : 09 Декабря 2005, 13:31:19 »
Есть основной скрипт по размеру не очень большой, который в зависимости от режима подключает определенные модули как внешние процедуры (для каждого режима свой), таких модулей достаточно много, но во время работы используется только один из них. Но, при компиляции скрипта, естественно все модули подгружаются и тоже компилятся.

Все режимы работы скрипта у меня в отдельных процедурах, поэтому я весь код процедур перенес в хеш и добавил процедуру AUTOLOAD, которая компилит процедуры через eval по мере обращения к ним. Так же я поступил и с методами модулей...

Вопрос: Насколько эффективно использование такой схемы, для уменьшения затрат ресурсов системы и увеличения скорости работы?
С одной стороны, подгружается и компилится меньше модулей, соответсвенно общий объем памяти меньше, но с другой - происходит постоянное переключение компилятор<->интерпритатор...
Разные источники говорят по-разному...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
эффективность использования eval?
« Ответ #1 : 09 Декабря 2005, 13:46:41 »
Phoinix
ИМХО тут надо просто провести тесты... и выяснить, что для тебя лучше...
And no religion too...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
эффективность использования eval?
« Ответ #2 : 09 Декабря 2005, 13:59:36 »
commander

Честно говоря, не нашел на CPAN модуля который показывает количество ресурсов, занимаемых скриптом.

Time::HiRes - не пойдет... на сервере довольно много процессов время работы постоянно скачет...

Оффлайн Kannabismus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
эффективность использования eval?
« Ответ #3 : 09 Декабря 2005, 15:26:39 »
Скушаную память покажет ps, а эффективность алгоритма проверяется при помощи Benchmark.


use Benchmark;
my $iterations 10000000;
sub add {
   
1
}
sub mlt {
   
5
}
timethese $iterations, { \'Сложение\' => add(), \'Умножение\' => mlt() });


Benchmark: timing 10000000 iterations of Сложение, Умножение...
  Сложение:  2 wallclock secs ( 0.93 usr +  0.00 sys =  0.93 CPU) @ 10729613.73/s (n=10000000)
 Умножение:  1 wallclock secs ( 0.68 usr +  0.00 sys =  0.68 CPU) @ 14705882.35/s (n=10000000)

В плане производительности лучше обойтись без использования eval, что бы perl скомпилировал скрипт целиком при запуске. Так же это позволяет выявлять ошибки на этапе компиляции, а не во время работы скрипта.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
эффективность использования eval?
« Ответ #4 : 09 Декабря 2005, 19:30:12 »
Phoinix
согласно моим тестам эфективность очень высокая если используются не все процедуры.
и именно в "ручном" варианте. при использовании Autoloader или Selfloader толку уже не так много
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
эффективность использования eval?
« Ответ #5 : 09 Декабря 2005, 22:21:25 »
Kannabismus
Цитировать
Так же это позволяет выявлять ошибки на этапе компиляции, а не во время работы скрипта.

Честно говоря, если скрипт отлажен, то он ошибок выдавать не будет...
А за модуль спасибо... попробую... правда, честно говоря, с трудом представляю как я его буду внедрять в основной скрипт... но это не самое страшное...

ondr
В "ручном", это по принципу как собран твой модуль PCGI?
Если да, то именно по этому принципу я и собрал свои модули...

 

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