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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Victor Wagner                        2:5020/400     10 Apr 2003  17:06:19
 To : Oleg Ivanenko
 Subject : Re: mod_perl: parallel requests
 -------------------------------------------------------------------------------- 
 
 Oleg Ivanenko <ash@aska.com.ua> wrote:
 
 OI> То есть, другими словами, даже если моя программа не делает ликов, их
 OI> может делать еще что-то (mod_perl, apache etc) и поэтому лучше от греха
 OI> подальше время от времени прибивать экземпляры mod_perl выполняющего мой
 OI> код? Hе шаманство ли это?
 
 Hе шаманство. Это честное заметание мусора под ковер.
 
 Шаманство это когда для того, чтобы заработало электричество нужно
 спуститься в подвал и постучать по водопроводной трубе.
 Причем связи между неработой электричества и водопроводной трубой никто
 объяснить не может.
 
 Здесь же причинно-следственная связь очевидна: мы знаем что программа
 пухнет со временем. Поэтому чтобы она не пухла слишком сильно, мы
 ограничиваем срок ее жизни. Это скорее можно назвать симптоматическим
 лечением.
 OI> Возможно я некорректно выразился. Под словом "программа" я понимаю
 OI> выполняемый операционной системой код написанный программистом.
 
 Обрати внимание, что Registry-скрипты выполняются ни разу не
 операционной системой, а собственно модперловым апачем, который их
 читает как обычные текстовые файлы, мало-мало переписывает и передает
 встроенному интерпретатору перла как строки, содержащие перловый код.
 
 Программа это все-таки то, что запускается на выполнение системным
 вызовом exec.
 
 OI> Под словом "заглушка" я понимал сгенерированный mod_perl код для
 OI> выполнения внутри себя моей программы. По английски это можно назвать
 OI> stub. Так вот, представь себе ситуацию, что до аварийного завершения
 OI> моей программы внутри пресловутой "заглушки" я имею в памяти 20 объектов
 OI> некоего класса. После того, как программа аварийно завершилась, эти 
 OI> объекты остаются в памяти "заглушки", вследствие, циклических ссылок, 
 
 Hе в памяти заглушки, а в памяти интерпретатора perl.
 
 OI> которые ты приводишь в пример ниже по тексту и уничтожаются только
 
 Плохо тебе.
 
 Перепиши код следующим образом:
 eval {
   #твой код который может аварийно завершиться
 };
 if ($@) {
   #он таки завершился аварийно
   #Чистим все объекты некоего класса  
   MyClass::DestroyAll();
 }
 
 Остается придумать как написать этот самый DestroyAll
 
 Можно например так - в конструкторе ты помещаешь ссылку на объект
 в некоторый глобальный для класса (our) хэш.
 В деструкторе (который вызывается явно при нормальной работе, так как
 циклические ссылки там все равно есть) - оттуда ее прибиваешь.
 
 А DestroyAll идет по values этого хэша и для всего что там найдет
 вызывает деструктор.
 
 OI> Я знаю, о преимуществах ООП и поэтому в perl все пишу КЛАССАМИ. Я
 OI> убедился на собственном опыте в опасностях, которые подстерегают
 OI> поклонников глобальных переменных.
 
 Вышеописанный случай как раз один из немногих, где глобальные переменные
 полезны.
 -- 
 --- ifmail v.2.15dev4
  * Origin: Free Net of Leninsky,45 (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: mod_perl: parallel requests   Victor Wagner   10 Apr 2003 17:06:19 
Архивное /ru.cgi.perl/1517853b425a9.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional