Как Google Chrome может изолировать вкладки в отдельные процессы, когда они выглядят как одно приложение?
Нам сообщили, что Google Chrome запускает каждую вкладку в отдельном процессе. Поэтому сбой на одной вкладке не вызовет проблем на других вкладках.
AFAIK, многопроцессы в основном используются в программах без GUI. Я никогда не читал никакой техники, которая бы встраивала несколько процессов GUI в один.
Как это делает Chrome?
Я задаю этот вопрос, потому что я разрабатываю программное обеспечение для видеонаблюдения, которое будет использовать SDK для декодирования видео от нескольких производителей камер, некоторые из которых далеки от стабильности. Поэтому я предпочитаю запускать эти SDK в разных процессах, которые, как я думал, похожи на Chrome.
Ответы
Ответ 1
В основном, они используют другой процесс, который склеивает их все вместе в графический интерфейс.
Google Chrome создает три разных типа процессов: браузер, средства визуализации и плагины.
Браузер:. Существует только один процесс браузера, который управляет вкладками, окнами и "хромом" браузера. Этот процесс также обрабатывает все взаимодействия с диском, сетью, пользовательским вводом и отображением, но не пытается анализировать или отображать любой контент из Интернета.
Renderers: В процессе браузера создается много процессов рендеринга, каждый из которых отвечает за рендеринг веб-страниц. Процессы рендеринга содержат всю сложную логику обработки HTML, JavaScript, CSS, изображений и т.д. Chrome достигает этого, используя механизм рендеринга WebKit с открытым исходным кодом, который также используется веб-браузером Apple Safari. Каждый процесс визуализации запускается в песочнице, что означает, что он практически не имеет прямого доступа к диску, сети или дисплею. Все взаимодействия с веб-приложениями, в том числе событиями ввода пользователя и картиной экрана, должны проходить через браузер. Это позволяет браузеру отслеживать процессы визуализации для подозрительной активности, убивая их, если он подозревает, что произошел эксплойт.
Плагины: В процессе браузера также создается один процесс для каждого типа подключаемого модуля, такого как Flash, Quicktime или Adobe Reader. Эти процессы просто содержат сами подключаемые модули, а также некоторый код клея, позволяющий им взаимодействовать с браузером и рендерингами.
Источник: Блог Chromium: многопроцессорная архитектура
Ответ 2
Поскольку это сайт разработчика, странно, что никто не связан с Design Documents, в частности, с раздел "Многопроцессорная архитектура" .
Вот обзор архитектуры:
![Архитектурный обзор потоков браузера]()
Ответ 3
В большинстве работ по рендерингу веб-страницы выясняется, куда именно идут вещи (например, где разместить каждую картинку, какой цвет отображать каждую часть текста). Эта работа выполняется в отдельном процессе. Как только отдельный процесс выяснил, куда все идет, он передает эту информацию в основной процесс Chrome, который рисует все элементы на экране.
Непонятно, как настроена ваша система sdk для видео. Но у вас может быть один процесс, который распаковывает видео и другой процесс, который отображает его на дисплее. Скорее всего, вы используете opengl или DirectX. Эти API-интерфейсы накладывают определенные ограничения на то, как вы разделяете вещи между различными процессами.
Ответ 4
Я только что дал первый ответ (тот, который объясняет "плагины" vs 'renderers' vs 'browser'
всплеск... который кажется самым полным и имеет смысл для меня.
Единственное, что я добавлю, это всего лишь несколько комментариев о ПОЧЕМУ Google design
так оно и есть, и дать мнение о том, почему это всегда было моим первым выбором
для общего/ежедневного браузера. (Я понимаю, что КАК (а не ПОЧЕМУ)
вопрос задан.)
Конструирование так, чтобы отдельные компоненты имели свой код в отдельных процессах,
OS to'memory-protect 'процессов от случайного (или специально) изменения каждого
другими способами, явно не разработанными.
Единственными частями в такой конструкции, которые могут считывать и записывать общие данные, являются те
которые предназначены для НУЖНОГО доступа к этим данным и позволяют контролировать,
что доступ - это просто "чтение" доступа или "чтение" и "запись" доступа и т.д. И, поскольку
эти средства контроля доступа реализованы на оборудовании, они являются надежными гарантиями
что правила доступа не могут быть нарушены. Таким образом, плагины и расширения
от других авторов и компаний, работающих в отдельных вкладках/процессах, не может
сломать друг друга.
Такая конструкция приводит к тому, что она минимизирует шансы на изменение
некоторый код или данные, которые не были предназначены для изменения. Это для безопасности
причины и делает более надежным и менее ошибочный код.
Сам факт, что у Google такой замысловатый дизайн, для меня, хорошее свидетельство
факт, что Google, похоже, прекрасно понимает эти концепции и имеет
построил превосходный продукт. (Тем не менее, как веб-разработчик, мы все еще должны тестировать
наш веб-код с несколькими браузерами. И, например, браузеры, такие как Firefox,
были в течение долгого времени и имели отличную группу веб-разработчиков, связанных
"Дополнения" все еще имеют некоторые преимущества для некоторых задач.)
Но для повседневного использования в браузере для почти всех задач браузер Chrome
стал моим первым выбором. (Просто мое мнение, и, конечно же, YMMV.)
Ответ 5
Объекты Window - небольшие прямоугольные области, используемые для реализации виджетов, а не то, что пользователь видит в качестве окна, - прекрасно могут делиться между процессами, используя общую память или протокол X. Проверьте свои документы по инструментарию.