Как Google Chrome может изолировать вкладки в отдельные процессы, выглядя как одно приложение?

нам сказали, что Google Chrome запускает каждую вкладку в отдельном процессе. Поэтому сбой на одной вкладке не вызовет проблем на других вкладках.

AFAIK, multi-процессы главным образом использованы в программах без GUI. Я никогда не читал никакой техники, которая могла бы встроить несколько процессов GUI в один.

Как Chrome это делает?

Я задаю этот вопрос, потому что я разрабатываю программное обеспечение CCTV, которое будет использовать видео декодирование SDKs из несколько производителей камер, некоторые из которых далеки от стабильности. Поэтому я предпочитаю запускать эти SDK в разных процессах, которые, как я думал, похожи на Chrome.

5 ответов


в основном, они используют другой процесс, который склеивает их все вместе в GUI.

Google Chrome создает три различных типа процессов: браузер, визуализаторы и плагины.

браузер: существует только один процесс браузера, который управляет вкладками, окнами и "chrome" браузера. Этот процесс также обрабатывает все взаимодействия с диском, сетью, пользовательским вводом и отображением, но не делает попыток проанализировать или отобразить содержимое из сеть.

рендереры: процесс браузера создает много процессов визуализации, каждый из которых отвечает за рендеринг веб-страниц. Процессы визуализации содержат всю сложную логику для обработки HTML, JavaScript, CSS, изображений и так далее. Chrome достигает этого с помощью движка рендеринга WebKit с открытым исходным кодом, который также используется веб-браузером Safari от Apple. Каждый процесс визуализации выполняется в песочнице, что означает, что он практически не имеет прямого доступа к диску, сети или дисплею. Все взаимодействие с веб-приложениями, включая события пользовательского ввода и рисование экрана, должно проходить через процесс браузера. Это позволяет процессу браузера отслеживать визуализаторы подозрительной активности, убивая их, если он подозревает, что произошел эксплойт.

Плагины: процесс браузера также создает один процесс для каждого типа подключаемого модуля, который используется, например Flash, Quicktime или Adobe Reader. Эти процессы просто содержат сами плагины, а также некоторый код клея чтобы они могли взаимодействовать с браузером и визуализаторами.

источник: Chromium Blog: архитектура нескольких процессов


в этом контексте интересен фундаментальный дизайн.

вот соответствующие оформление документов, в частности архитектура мульти-процессов.

архитектурный обзор:

Architectural overview of browser threads


большая часть работы по рендерингу веб-страницы-это выяснить, куда именно идут вещи (т. е. где разместить каждую картинку, какой цвет для рендеринга каждого фрагмента текста). Эта работа осуществляется в рамках отдельного процесса. Как только отдельный процесс понял, куда все идет, он передает эту информацию в основной процесс Chrome, который рисует все элементы на экране.

неясно, как именно настроена ваша система video sdk. Но у вас может быть один процесс, который распаковывает видео и другой процесс, который отображает его на дисплее. Скорее всего, вы используете opengl или DirectX. Эти API smay накладывают некоторые ограничения на то, как вы разделяете вещи между различными процессами.


Я только что дал первый ответ (тот, который объясняет "браузер" vs "рендеры" vs "Плагины" рост...это кажется наиболее полным и имеет смысл для меня.

единственное, что я добавлю, это еще несколько комментариев о том, почему дизайн Google так ли это, и дайте мнение о том, почему это всегда было моим первым выбором на общую/на каждый день браузер. (Tho я понимаю, что как (а не почему) было заданный вопрос.)

проектирование индивидуальных компоненты имеют свой код в отдельных процессах позволяет процессы OS to 'memory-protect' от случайного (или преднамеренного) изменения каждого другие способы явно не разработаны.

единственными частями в таком дизайне, которые могут как читать, так и записывать общие данные, являются те части, которые предназначены для доступа к этим данным и позволяют контролировать этот доступ - это просто доступ "чтение" или "чтение" и "запись" и т. д. И, поскольку эти меры контроля доступа осуществляются в оборудование, они твердые гарантии что правила не будут нарушены. Таким образом, плагины и расширения от других авторов и компаний, работающих в отдельных вкладках / процессах, нельзя ломайте друг друга.

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

сам факт, что Google имеет такой сложный дизайн, для меня, хорошее свидетельство тот факт, что Google, похоже, отлично понимает эти концепции и имеет построен превосходный продукт. (Тем не менее, как веб-разработчик, мы все еще должны протестировать наш веб-код с несколькими браузерами. И, браузеры, такие как Firefox, имеющие был вокруг в течение длительного времени и имея отличную группу веб-разработчиков, связанных "дополнения" по-прежнему имеют некоторые преимущества для некоторых задач.)

но, для ежедневного общего использования браузера, почти для всех задач, браузер Chrome стала моей первый выбор. (только мое мнение, и конечно, YMMV.)


объекты окна - небольшие, мешочки прямоугольные участки, используемые для реализации виджетов, не то, что пользователь видит в окне - вполне могут быть разделены между процессами через разделяемую память или X-протокол. Проверьте документы вашего инструментария.