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

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

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

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

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

38
задан Cœur 29 January 2017 в 08:59
поделиться

4 ответа

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

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

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

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

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

Source: Блог хрома: Многопроцессорная архитектура

42
ответ дан 27 November 2019 в 03:43
поделиться
[

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

].
-2
ответ дан 27 November 2019 в 03:43
поделиться

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

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

0
ответ дан 27 November 2019 в 03:43
поделиться

В этом контексте интересна фундаментальная конструкция.

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

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

Architectural overview of browser threads

19
ответ дан 27 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: