Как Google Chrome может изолировать вкладки в отдельные процессы, будучи похожим на одно приложение? - PullRequest
38 голосов
/ 07 января 2010

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

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

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

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

Ответы [ 5 ]

42 голосов
/ 07 января 2010

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

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

Браузер: Существует только один процесс браузера, который управляет вкладками, окнами и «хромом» браузера. Этот процесс также обрабатывает все взаимодействия с диском, сетью, пользовательским вводом и отображением, но не пытается анализировать или отображать какой-либо контент из Интернета.

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

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

Источник: Блог Chromium: многопроцессная архитектура

18 голосов
/ 08 января 2010

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

Вот соответствующие проектные документы , в частности, многопроцессная архитектура .

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

Architectural overview of browser threads

0 голосов
/ 01 декабря 2013

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

ЕдинственноеЯ добавлю лишь несколько комментариев о том, ПОЧЕМУ дизайн Google такой, какой он есть, и дам мнение о том, почему он всегда был моим первым выбором для общего / повседневного браузера. (То есть я понимаю, КАК (а неПОЧЕМУ) был задан вопрос.)

Разработка таким образом, чтобы отдельные компоненты содержали свой код в отдельных процессах, позволяет ОС «защищать память» от случайного (или преднамеренного) изменения друг друга способами, которые явно не определенывстроенный.

Единственными частями в таком дизайне, которые могут как считывать, так и записывать совместно используемые данные, являются те части, которые предназначены для НУЖДЫ в доступе к этим данным и позволяют контролировать, является ли этот доступ просто «прочитанным».доступ или доступ для «чтения» и «записи» и т. д. И, поскольку эти средства контроля доступа реализованы в оборудовании, они являются твердыми гарантиями того, чтоПравила доступа не могут быть нарушены.Таким образом, плагины и расширения от других авторов и компаний, работающие на отдельных вкладках / процессах, не могут сломать друг друга.

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

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

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

0 голосов
/ 09 января 2010

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

0 голосов
/ 08 января 2010

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

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

...