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