|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 23 Oct 2003 15:34:17 To : Sergey Skvortsov Subject : Re: ModPerl vs FastPerl vs PHP -------------------------------------------------------------------------------- Sergey Skvortsov wrote: > как резюме - методики максимизации shared code в > общем случае нет. Могу предложить такую методику. Hе автоматическую, но и не нарушающую совместимости. Ввести именованные пулы памяти. К примеру, изначально в системе присутсвует единственный пул STDPOOL. Любая память выделяется из него. Прагмой use mempool lexical => 'LEXPOOL'; мы создаем (если такового еще не было) новый пул и после данной команды все lexical-scope vars будут аллокироваться в новом пуле. Аналогично и для остальных общеупотребимых структур данных. Hу и возможность явного указания пула для конкретной переменной через аттрибуты: my ($a, $b, $c) : mempool(PRIVATE) = @_; my $code = sub : mempool(STDPOOL) { print "closured: $xx\n" }; все пулы в сущности однотипны и бесхитростны с единственным условием: память от системы пулы захватывают целыми страницами. (Дополнительная вкусность - можно сделать mlock(2) на какой-либо пул памяти.) Пример использования use mempool в startup.pl от mod_perl: use mempool all => 'SHARED'; use CGI; CGI->compile(':all'); use mempool all => 'STDPOOL'; Примечание: либо структуры SV/HV/CV/GV/... всегда аллокировать в стандартном пуле а указание пула относить только к PV в них, либо надо рвать структуры SV/HV/CV/GV на части, чтоб постоянно меняющийся refcnt не приводил к расслоению страниц с read-only данными. Или, как промежуточный вариант, более эффективный чем первый, но более простой чем второй. Те структуры SV которые становятся членами массивов и хэшей (HV/AV) переаллокировать при присвоении из стандартного в указанный пул. PV не трогать. Hда... -- Андрей P.S. Кто понял, что я тут понаписал - поднимите руку. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/65776e81f270.html, оценка из 5, голосов 10
|