Где в Chromium живут Blink и V8: процессы браузера, рендерера, GPU и сети, зачем их разделили и при чём тут изоляция сайтов.
Откройте встроенный диспетчер задач Chrome — и вы увидите не одну программу «Chrome», а список отдельных процессов: один для самого браузера, один или несколько для веб-страниц, один для GPU, один для сети. Этот список — вся архитектура в миниатюре. Chromium, открытый проект под Chrome, Edge, Brave и Opera, — это не единый движок в одном блоке памяти, а набор взаимодействующих процессов, и Blink (движок отрисовки) вместе с V8 (движок JavaScript) живут лишь в процессах одного вида. Эта статья отвечает на один вопрос: где в Chromium находятся Blink и V8 и как процессы делят работу?
Главное
- Chromium работает как набор процессов: привилегированный процесс браузера отвечает за интерфейс, вкладки и координацию, а рядом — изолированные в песочнице процессы рендерера, процесс GPU и сетевые и вспомогательные службы.
- Blink и V8 работают внутри процесса рендерера. Здесь разбирается HTML, выполняется JavaScript страницы и рассчитывается компоновка (layout) — и это намеренно наименее доверенная часть.
- Разделение нужно ради стабильности и безопасности: сбой одной страницы не должен ронять весь браузер, а взломанная страница не должна читать ваши файлы или данные других сайтов.
- Изоляция сайтов (Site Isolation) идёт дальше и старается держать страницы разных сайтов в разных процессах рендерера; эту защиту усилили после уязвимостей процессоров класса Spectre.
- Эту схему разделяют все браузеры на Chromium — одна из причин, почему особенности движка трудно подделать.
Модель в одном предложении
Документ по многопроцессной архитектуре Chromium формулирует идею прямо: код, обрабатывающий недоверенный веб-контент, запускать в отдельных ограниченных процессах, а главным оставить один привилегированный процесс. Серия Google Inside look at modern web browser рассказывает ту же историю со стороны пользователя, с тем же набором процессов. Если сначала нужно понять, что такое движок, начните со статьи о движках браузеров и возвращайтесь.
Кто где работает
Точная схема процессов в Chromium со временем менялась, а документ местами исторический, поэтому считайте ниже устойчивое ядро, а не актуальный перечень процессов. Оба источника согласны в этих ролях.
| Процесс | Что в нём работает | К чему имеет доступ |
|---|---|---|
| Браузер | Окно, адресная строка, закладки, кнопки «назад» и «вперёд»; координирует все остальные процессы | Максимум привилегий: файлы, системные ресурсы, интерфейс и управление всеми остальными процессами |
| Рендерер | Blink (HTML, CSS, компоновка, отрисовка) и V8 (JavaScript) для веб-контента | Очень мало: работает в песочнице и за всем, что вне её, обращается к процессу браузера |
| GPU | Задачи для графического оборудования, например композиция и отрисовка | Графический драйвер, изолированно от страниц, которые просят рисовать |
| Сеть и прочие службы | Загрузка ресурсов и вспомогательные задачи, которые безопаснее держать вне процесса браузера | Сетевой доступ, но без общего процесса с кодом страниц |
Главное — средняя строка. Содержимое страницы во вкладке обрабатывает процесс рендерера, и именно здесь встречаются обе половины пары движков. Если вы читали о различии движка отрисовки и движка JavaScript, то «два движка, взаимодействующие при загрузке страницы» — это происходит внутри одного процесса рендерера: Blink строит DOM и компоновку, V8 выполняет скрипты, которые могут их менять, и ни один не пересекает границу процесса.
Зачем вообще делить браузер
К этому привели две проблемы, о которых говорят и документ, и разбор Google.
Сбои. Страницы выполняют произвольный код и иногда зависают или падают. Если бы всё работало в одном процессе, одна плохая вкладка утащила бы за собой все остальные и ваш сеанс. С отдельными процессами рендерера сбой локализован: процесс браузера жив и показывает знакомое «страница аварийно завершилась» только для этой вкладки.
Песочница. Blink и V8 — огромные сложные программы, которые целый день разбирают враждебный ввод, поэтому ошибки неизбежны. Chromium исходит из того, что часть из них можно эксплуатировать, и ограничивает ущерб: рендерер работает с урезанными правами, а когда ему нужно прочитать файл или открыть сетевое соединение, он обращается к процессу браузера (и к службам, которыми тот распоряжается), а тот может отказать. Поэтому взлом рендерера не равен автоматически взлому вашего компьютера. Цена — накладные расходы: больше процессов — больше памяти и обмен сообщениями между ними; команда Chromium приняла этот компромисс ради безопасности.
Изоляция сайтов: один сайт — один процесс
Вкладка не равна процессу, и граница процессов важнее всего между сайтами. Изоляция сайтов стремится к тому, чтобы процесс рендерера содержал страницы только одного сайта: страница одного сайта не оказывается в памяти того же процесса, что и страница другого, — включая встроенные iframe, которые могут отрисовываться в другом процессе, чем страница, в которую они встроены. Для пользователей настольной версии Chrome включил изоляцию сайтов по умолчанию в Chrome 67 в 2018 году; на Android её применяют выборочно, потому что памяти у телефонов меньше.
Мотив обострился после Spectre — класса уязвимостей спекулятивного исполнения процессоров, раскрытых в 2018 году. Атаки такого типа позволяют коду читать память в пределах собственного процесса, так что вредоносная страница, делящая процесс со страницей банка, в принципе могла бы пытаться прочитать то, чего видеть не должна. Разные процессы убирают эту память из досягаемости и позволяют процессу браузера быть арбитром, а не доверять странице. Другая сторона той же истории — почему браузеры огрубили таймеры, чтобы затруднить такие атаки, — разобрана в статье о точности таймеров браузера.
Цифр о затратах памяти и производительности мы здесь не приводим: они сильно зависят от устройства, страницы и версии Chromium, а в официальных материалах нет единой цифры, которую стоило бы цитировать.
Как увидеть это на своём компьютере
Чтобы понаблюдать за этой архитектурой, никаких особых инструментов не нужно:
- Диспетчер задач. В Chrome откройте меню → Дополнительные инструменты → Диспетчер задач (или нажмите Shift+Esc в Windows, Linux и ChromeOS). Каждая строка — отдельный процесс: браузер, процесс GPU, вспомогательные службы вроде сетевой и процессы рендерера с подписью, какие вкладки или фреймы они обслуживают. Откройте две вкладки одного сайта и две вкладки разных сайтов и сравните идентификаторы процессов.
- chrome://process-internals. Эта внутренняя страница показывает, в каком режиме изоляции сайтов работает браузер и какой фрейм в каком процессе находится. Введите адрес в строку вручную: веб-страницы не могут ссылаться на неё.
Что это значит для отпечатков
Для читателей BrowserInsight есть практический вывод. Edge, Brave, Opera, Vivaldi и Chrome наследуют эту структуру от Chromium; они различаются брендингом, настройками по умолчанию и службами, но не тем, что Blink и V8 работают в изолированном процессе рендерера. Поэтому наша проверка движка сообщает для всех них Blink/Chromium — подробнее в статьях Chromium против Chrome и почему так много браузеров используют Chromium.
Поэтому же поведение на уровне движка трудно имитировать. Скрипт может подделать строку User-Agent, но не может изменить, какой движок JavaScript реально исполняет код (отпечатки движка JavaScript), а набор поддерживаемых веб-возможностей следует за версией сборки (определение версии движка по возможностям). Headless Chrome запускает тот же стек Blink и V8, поэтому автоматизацию находят по поведению и проверкам согласованности, а не по другому движку — см. методы обнаружения ботов.
Честное ограничение: проверка движка определяет движок и его версию по поддерживаемым возможностям. Она не инспектирует процессы и не скажет, включена ли изоляция сайтов. Для этого используйте описанные выше диспетчер задач и chrome://process-internals.
Частые вопросы
Chromium — это один процесс или много?
Много. Привилегированный процесс браузера координирует изолированные процессы рендерера, процесс GPU и сетевые и вспомогательные службы. Точное число зависит от открытых страниц и версии Chromium.
Blink и V8 работают в процессе браузера?
Нет. Оба работают в процессе рендерера, в песочнице, потому что имеют дело с недоверенным веб-контентом. Процесс браузера отвечает за интерфейс, координацию и всё, что требует повышенных прав.
У каждой вкладки свой процесс?
Не строго. Вкладки и сайты связаны, но не тождественны: изоляция сайтов стремится к одному сайту на процесс рендерера, а встроенные кросс-сайтовые фреймы могут жить в другом процессе, чем окружающая страница. В некоторых случаях Chromium может также делить или повторно использовать процессы.
Делает ли это Chrome безопаснее других браузеров?
В некоторых отношениях браузеры на Chromium сложнее взломать, но изоляция процессов — лишь один из многих слоёв, и у других движков есть собственные многопроцессные схемы. Безопасность зависит также от обновлений, расширений и вашего поведения.
Заключение
Chromium лучше воспринимать как небольшую организацию, а не одну программу: один привилегированный менеджер, несколько специалистов и изолированный рендерер, где Blink и V8 превращают враждебную страницу в пиксели. Разделение даёт локализацию сбоев и меньший радиус поражения, а изоляция сайтов распространяет это на отделение сайтов друг от друга. Понимание того, где находятся движки, объясняет, почему браузеры на Chromium ведут себя одинаково и почему этот общий стек так полезен, чтобы отличать настоящие браузеры от имитаций.


