On Feb 27, 2014, at 22:22 , AlexyFrost wrote:
Anton Yuzhaninov Wrote:
---
On 02/26/14 03:17, AlexyFrost wrote:
Мусора в том, что наследуется нет.
listen socket нужен.
других сокетов, открытых в мастере не должно быть.
Обработчики сигналов AFAIK переопределяются, если нужно.
Вот об этом я и говорил: с использованием fork() воркер попадает в сильную
зависимость от того, что должно и не должно быть инициализировано в мастере,
т.е., какие контр-действия придётся ему делать (закрытие чего то, отключение
сигналов etc). Понятное дело, что для компилируемой программы этот аргумент
не столь важен, но, тем не менее, для большого и сложного проекта, который
пишет не один человек, такие сайд-эффекты вполне существенны, мне кажется.
К тому же, если форки используются для разных типов воркеров (обработка
соединений, какой то кеш, какие то сервисные штуки), то у них могут быть
разные реакции на унаследованные от мастера данные - кому то надо сделать
то, кому то это, и в случае внесения изменений в мастер (добавили новый
сигнал?) придётся править код всех воркеров.
То что worker-ы используют память мастера (через COW) очень даже
полезно -
большая геобаза загруженная мастером будет использоваться всеми
процессами и не
надо будет загружать её N раз в каждый worker отдельно.
Для подобных данных можно использовать shared memory, что так же выглядит
логичнее, чем копия данных мастера, да и в случе потребностей горячей
замены таких данных сделать это будет проще в одном месте.
Shared memory в неродственных процессах сочетании с ASRL превращается в ад.
В адресное пространство воркеров попадает часть кода и данных, не
нужных
worker-ом, но ничего плохого в этом нет.
Меня, в целом, не столько беспокоят левые данные мастера в воркере,
сколько потенциальные проблемы, которые они могут привнести (выше
перечислял).
Ввиду отсутствия fork()а на Windows, nginx/Windows запускает новые процессы.
Вот там проблемы, так проблемы. Сигналы - это семечки.
--
Igor Sysoev
http://nginx.com
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru