ЭВМ/ Хромовая зигота

24.10.2011

Как-то, запустив ps на машине с работающим браузером Chrome, я увидел любопытную картину:

3206 ?? Ss 0:18.18 chrome: (chrome)
29405 ?? S 0:01.04 chrome: (chrome)
29873 ?? I 0:00.76 chrome: --type=zygote (chrome)
18408 ?? S 0:10.25 chrome: --type=renderer --lang=en-US --force-fieldtes
22029 ?? S 0:08.76 chrome: --type=extension --lang=en-US --force-fieldte
17670 ?? S 0:01.00 chrome: --type=extension --lang=en-US --force-fieldte
8551 ?? S 0:01.51 chrome: --type=extension --lang=en-US --force-fieldte
10959 ?? S 0:02.02 chrome: --type=renderer --lang=en-US --force-fieldtes

Мое внимание привлекло слово zygote в параметрах одного из процессов chrome. Как известно из школьного курса биологии, зигота — это оплодотворенная и готовая к развитию яйцеклетка. Ха, подумал я, ну и шутники же эти гугловцы. Видимо, так они назвали свой основной процесс, от которого форкаются остальные. В Chrome ведь каждая вкладка и каждое расширение — это отдельный процесс.

Но затем, немного погуглив, я узнал, что у этой зиготы более глубинный смысл. Одна из важных особенностей Chrome — прозрачное автоматическое обновление. Допустим, во время работы браузера обновилась какая-то разделяемая библиотека. Затем пользователь открывает новую вкладку, запускается новый процесс для рендеринга страницы. Если просто делать exec бинарника с диска, то новый процесс подхватит уже новую библиотеку, которая может быть несовместима с той, что была при старте основного процесса браузера. Чтобы этого избежать, при первом запуске Chrome запускает протопроцесс (зиготу), который затем будет форкаться каждый раз, когда нужно запустить новый процесс рендеринга. Таким образом все последующие копии будут иметь один и тот же набор библиотек, который был при запуске браузера.

Сам процесс-зигота ничего не делает, просто висит в памяти и ждет команды от мастера, чтобы разделиться и дать жизнь новой вкладке. Такая вот биология.