nginx internals question

Konstantin Sorokin kvs at sigterm.ru
Thu Aug 25 13:44:16 MSD 2005


On Thu, Aug 25, 2005 at 12:55:59PM +0400, Igor Sysoev wrote:
> On Thu, 25 Aug 2005, Konstantin Sorokin wrote:
> 
> >On Thu, Aug 25, 2005 at 12:14:00PM +0400, Igor Sysoev wrote:
> >>On Thu, 25 Aug 2005, Konstantin Sorokin wrote:
> >>
> >>>On Mon, Aug 22, 2005 at 04:28:38PM +0400, Igor Sysoev wrote:
> >>>>On Mon, 22 Aug 2005, Konstantin Sorokin wrote:
> >>>>
> >>>>>Игорь, а разумно ли будет использовать nginx'овую hash таблицу
> >>>>>(core/ngx_hash.c) для организации хэшей в сотни тысяч элементов ?
> >>>>>Судя по коду, сейчас она используется на небольшом количестве
> >>>>>пар "ключ"  <---> "значение".
> >>>>
> >>>>Нет, текущая реализация подходит только для небольшого числа (сотни или
> >>>>около
> >>>>того) предопределённых элементов. Я планирую ещё сделать "ключ" 
> >>>>->"массив
> >>>>значений". Кроме того, в nginx есть ещё пара хешей (extention -> mime
> >>>>type и
> >>>>имя сервера -> конфигурация), которые пока ещё не переехали на
> >>>>core/ngx_hash.c.
> >>>>
> >>>
> >>>Еще вопрос. Если мне надо завести некую сущность, но таким образом,
> >>>чтобы она была своя для каждой копии 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 ?

-- 
Konstantin Sorokin





More information about the nginx-ru mailing list