Anton Yuzhaninov Wrote:
-------------------------------------------------------
> On 02/26/14 03:17, AlexyFrost wrote:
> Мусора в том, что наследуется нет.
>
> listen socket нужен.
> других сокетов, открытых в мастере не должно быть.
>
> Обработчики сигналов AFAIK переопределяются, если нужно.
Вот об этом я и говорил: с использованием fork() воркер попадает в сильную зависимость от того, что должно и не должно быть инициализировано в мастере, т.е., какие контр-действия придётся ему делать (закрытие чего то, отключение сигналов etc). Понятное дело, что для компилируемой программы этот аргумент не столь важен, но, тем не менее, для большого и сложного проекта, который пишет не один человек, такие сайд-эффекты вполне существенны, мне кажется.
К тому же, если форки используются для разных типов воркеров (обработка соединений, какой то кеш, какие то сервисные штуки), то у них могут быть разные реакции на унаследованные от мастера данные - кому то надо сделать то, кому то это, и в случае внесения изменений в мастер (добавили новый сигнал?) придётся править код всех воркеров.
> То что worker-ы используют память мастера (через COW) очень даже
> полезно -
> большая геобаза загруженная мастером будет использоваться всеми
> процессами и не
> надо будет загружать её N раз в каждый worker отдельно.
Для подобных данных можно использовать shared memory, что так же выглядит логичнее, чем "копия" данных мастера, да и в случе потребностей горячей замены таких данных сделать это будет проще в одном месте.
> В адресное пространство воркеров попадает часть кода и данных, не
> нужных
> worker-ом, но ничего плохого в этом нет.
Меня, в целом, не столько беспокоят "левые" данные мастера в воркере, сколько потенциальные проблемы, которые они могут привнести (выше перечислял).