ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx internals question



On Thu, 25 Aug 2005, Konstantin Sorokin wrote:

Еще вопрос. Если мне надо завести некую сущность, но таким образом,
чтобы она была своя для каждой копии worker'а, как это наиболее
кошерно сделать ? Если использовать хук 'init process', то куда надо
помещать указатель, на эту сущность и как с ней потом работать в
фильтрах ?

Сущность используется в нескольких фильтрах или только в том, где
она создавалась ? Если второе - то просто статический указатель в модуле.
Если первое, то нужно более подробное описание.

Вот в этом и проблема, что пока не совсем ясно будет ли нужно использование
из других модулей. Грубо говоря сущность -- это некая хэш таблица, которая
будет динамически worker'ами пополняться в процессе работы. Возможно дальше
захочется иметь к ней доступ и из других модулей.

На данный момент ничего такого нет. Ближе всего к этому механизм переменных.
Они, правда, per-request, но можно в переменную указатель на глобальный
хэш. Есть ещё одно "но", в переменной может хранится строка и
численное значение, а не произвольный указатель:

typedef struct {
    ngx_uint_t                     value;
    ngx_str_t                      text;
} ngx_http_variable_value_t;


Как я понял, pool из ngx_cycle_t, указатель на котороый передается в
хук 'init process', не свой на каждый процесс ? Т.е. если хочется
динамически аллоцировать в этом хуке, то следует использовать обычный
malloc ?

cycle->pool наследуется из мастер процесса при форке. После форка он локальный
для рабочего процесса, поэтому можно использовать и его. Но нужно иметь
в виду, что память из пула в общем случае освобождается только при его
уничтожении, то есть, в данном случае при окончании работы рабочего процесса.


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.