nginx internals question

Igor Sysoev is at rambler-co.ru
Thu Aug 25 13:52:02 MSD 2005


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






More information about the nginx-ru mailing list