Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     27 Feb 2002  21:15:46
 To : All
 Subject : Re: mod_perl&nesting subroutines
 -------------------------------------------------------------------------------- 
 
 Sadretdinova Nelly wrote:
 
  > Т.е. получается, что такое "размножение" переменных приводит к
  > потреблению большого количества памяти?
  >
 
 Утечки памяти как таковой не будет, поскольку в интерпретаторе живут
 только 2 копии переменной.
 Если конечно в них храниться нечто огромное, то это имеет значение...
 
  > Я не очень понимаю механизм работы mod_perl с переменными
  >
  > С FastCGI было понятно: все переменные, которые не должны меняться от
  > одного вызова скрипта к другому, объявляются до FastCGI->accept цикла,
  > там же им присваиваются значения, которые сидят себе неизменными в памяти.
  >
 
 в mod_perl тоже можно организовать сохранение значений от вызова к
 вызову, только
 нет смысла это делать. Дело в том, что интерпретаторов perl несколько -
 по одному на каждую
 копию дочернего процесса апача. И никакой гарантии, что следующий вызов
 придет именно
 на ожидаемый процесс. Переменные которые вообще никогда не меняются,
 т.е. константы,
 лучше и определить как константы. Меньше заморочек в любом коде.
 
  > А если у меня при использовании mod_perl есть некие глобальные
  > переменные, которые не должны меняться от запроса к запросу? (грубо
  > говоря, некие константы)
  >
 
 Можно определить их как константы или как инлайн функции
 (предпочтительно для Perl < 5.6.0).
 
 use constant MAX_NUM => 2345;
 
 или
 
 sub MAX_NUM() { 2345; }
 
 или определить как глобальные переменные и инициальзировать их только
 единожды:
 
 use vars qw($max_num);
 
 BEGIN {
      $max_num = 1234;
 }
 Это пример как писать кусок кода который будет выполнен только 1 раз,
 при первом обращении
 к скрипту в данной копии апача.
 
  > Если я объявляю переменную в vars, а затем присваиваю ей некое
  > значение, будет ли оно хранится в таблице имен или при новом вызове
  > скрипта это присвоение выполнится снова?
  >
 
 Значение то будет храниться. Вот только если инициализация не обрамлена
 BEGIN{ ... }, то она будет
 выполняться опять и перетирать старое значение. Если никакой
 инициализации вообще нет, то
 будет доступно предыдущее значение, вот только использовать его
 бессмыслено. Оно может быть секундной
 давности, а может недельной, может от одного юзера, а может от другого.
 Как карты лягут. Копий апача
 обычно с десяток, и на какой придет следующий запрос - никто не ведает.
 Тот который будет свободен
 в данный момент.
 
 Андрей
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: mod_perl&nesting subroutines   Andrey Sapozhnikov   27 Feb 2002 21:15:46 
Архивное /ru.cgi.perl/52845fd9e41e.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional