2010-01-07 11 views
36

Uns wurde gesagt, dass Google Chrome jede Registerkarte in einem separaten Prozess ausführt. Daher würde ein Absturz auf einer Registerkarte in den anderen Registerkarten keine Probleme verursachen.Wie kann Google Chrome Tabs in separaten Prozessen isolieren, während sie wie eine einzelne Anwendung aussehen?

AFAIK, Multi-Prozesse werden meist in Programmen ohne GUI verwendet. Ich habe noch nie eine Technik gelesen, die mehrere GUI-Prozesse in eine einzige einbetten könnte.

Wie macht Chrome das?

Ich stelle diese Frage, weil ich CCTV-Software entwerfe, die Video-Dekodierung SDKs von mehreren Kameraherstellern verwenden wird, von denen einige weit davon entfernt sind, stabil zu sein. Daher bevorzuge ich die Ausführung dieser SDKs in verschiedenen Prozessen, von denen ich denke, dass sie Chrome ähneln.

+1

Laden Sie die Quelle herunter und sehen Sie! Dies wäre für Sie von großem Vorteil, wenn Sie eine ähnliche Lösung benötigen. Google Chrome ist Open Source. – Conor

+0

Meine Kasse der Chromiumquelle ist 19.7 GB und 545.764 Dateien. Die [oben hervorgehobenen Links] (http://dev.chromium.org/developers/design-documents/process-models) werden viel schneller durchgehen! –

Antwort

42

Im Grunde verwenden sie einen anderen Prozess, der sie alle zusammen in die GUI klebt.

Google Chrome erstellt drei verschiedene Arten von Prozessen: Browser, Renderer und Plug-Ins.

Browser: Es gibt nur einen Browser-Prozess, der die Registerkarten, Fenster und "Chrome" des Browsers verwaltet. Dieser Prozess behandelt auch alle Interaktionen mit dem Datenträger, dem Netzwerk, den Benutzereingaben und der Anzeige, macht jedoch keinen Versuch, Inhalte aus dem Web zu analysieren oder zu rendern.

Renderer: Der Browserprozess erstellt viele Rendererprozesse, von denen jeder für das Rendern von Webseiten zuständig ist. Die Renderer-Prozesse enthalten die gesamte komplexe Logik für die Verarbeitung von HTML, JavaScript, CSS, Bildern und so weiter. Chrome erreicht dies mithilfe der Open-Source-WebKit-Rendering-Engine, die auch von Apples Safari-Webbrowser verwendet wird. Jeder Renderer-Prozess wird in einer Sandbox ausgeführt, was bedeutet, dass er fast keinen direkten Zugriff auf die Festplatte, das Netzwerk oder die Anzeige hat. Alle Interaktionen mit Web-Apps, einschließlich Benutzereingabeereignissen und Bildschirmfarben, müssen den Browserprozess durchlaufen. Dadurch kann der Browser die Renderer auf verdächtige Aktivitäten hin überwachen und sie töten, wenn ein Exploit vermutet wird.

Plug-in: Der Browser-Prozess schafft auch ein Verfahren für jede Art von Plug-in, dass in Gebrauch ist, wie Flash, Quicktime oder Adobe Reader. Diese Prozesse enthalten nur die Plug-Ins selbst, zusammen mit etwas Klebecode, damit sie mit dem Browser und den Renderern interagieren können.

Quelle: Chromium Blog: Multi-process Architecture

+1

Ich verstehe es nicht. Es sieht so aus, als ob diese Registerkarten zum Browser-Prozess gehören. Wie können diese Renderbilder Bilder zeichnen und Text auf einer Registerkarte zu einem anderen Prozess gehören? – ablmf

+4

Sie gehören nicht zum Browserprozess. Der Browser-Prozess verwaltet sie einfach (er erstellt sie, stoppt sie und überwacht sie).Der Browser-Prozess erstellt auch die Browser-GUI, aber die interne Logik der Registerkarten (der riskante Teil, der anfällig für Abstürze ist) wird von den separaten Renderer-Prozessen (einer für jede Registerkarte) behandelt. –

+1

Große Zusammenfassung! Eine Sache, die hinzugefügt werden muss, jede Chrome Extension läuft in ihrem eigenen Prozess. Wenn Sie wissen möchten, wie Prozesse miteinander kommunizieren, werfen Sie einen Blick auf den IPC-Abschnitt in der Chromium-Quellenbasis. –

0

Der meiste Arbeit eine Webseite zu machen ist, herauszufinden, wo genau die Dinge gehen (das heißt, wo jedes Bild zu platzieren, welche Farbe jedes Stück Text zu machen). Diese Arbeit wird in einem separaten Prozess ausgeführt. Sobald der separate Prozess ermittelt hat, wohin alles geht, werden diese Informationen an den Chrome-Hauptprozess weitergeleitet, der alle Elemente auf dem Bildschirm zeichnet.

Es ist nicht klar, wie genau Ihr Video SDK System eingerichtet ist. Aber Sie könnten einen Prozess haben, der das Video dekomprimiert und einen anderen Prozess, der es auf dem Display rendert. Höchstwahrscheinlich verwenden Sie OpenGL oder DirectX. Diese APIs erfordern einige Einschränkungen bei der Aufteilung der Prozesse auf verschiedene Prozesse.

+1

In Bezug auf Ihren ersten Absatz ist mir klar, dass Chrome dies nicht tut, aber die Technik ist nicht anders als OLE. Sie haben Word-Dokument ein eingebettetes Excel-Dokument. Sie starten Excel, indem Sie in Word mit der rechten Maustaste auf die Tabelle klicken und Öffnen auswählen. Der Excel-Prozess wird gestartet, um das Dokument in einem separaten Prozess zu bearbeiten. Wenn Sie nun etwas in Excel eingeben, sehen Sie, dass es sich in Echtzeit auf der Word-Seite ändert. Die Methode funktioniert so, dass in Word ein Excel-spezifischer Renderer ausgeführt wird, der interprozessuell (mit COM IDataObject) kommuniziert, um zu den zu zeichnenden Daten zu gelangen. – zumalifeguard

+1

OLE ist eine Remoteprozeduraufruf (RPC) -Architektur. RPC ist in der Tat eine Möglichkeit für zwei Prozesse, auf derselben Maschine miteinander zu kommunizieren (allerdings ist es in den letzten Jahren in Ungnade gefallen). – speedplane

-2

Window-Objekte - die kleinen, ziehbar rechteckigen Flächen verwendet Widgets zu implementieren, nicht das, was der Benutzer als ein Fenster sieht - perfekt zwischen Prozessen gemeinsam genutzt werden, unter Verwendung der gemeinsam Speicher oder das X-Protokoll. Überprüfen Sie die Dokumente Ihres Toolkits.

+0

jeder HWND gehört zu einem bestimmten Prozess – zumalifeguard

+0

@Zuma, die nicht widerspricht, was ich geschrieben habe. – Tobu

0

Ich habe nur die erste Antwort (die eine Erklärung ‚Browser‘ vs ‚Renderer‘ vs ‚plugins‘ ein uptick ..., die die vollständigste scheint und macht guten Sinn für mich.

Die einzige Sache, Ich werde hinzufügen, sind nur ein paar Kommentare mehr über WARUM Googles Design ist so, wie es ist, und geben Sie eine Meinung darüber, warum es immer meine erste Wahl für einen allgemeinen/jeden Tag-Browser war. und nicht WARUM) war die Frage, die gestellt wird.)

Entwerfen, damit einzelne Bestandteile ihren Code in den unterschiedlichen Prozessen haben, erlaubt das Betriebssystem zum 'Speicherschutz' Prozesse aus versehentlich (oder absichtlich) ändern jede andere in nicht ausdrücklich designed-in.

Die einzigen Teile in einem solchen Design, das sowohl gemeinsam genutzte Daten lesen und schreiben können sind jene Teile, die diese Daten benötigen, sind konzipiert für den Zugriff auf und ermöglicht die Kontrolle, ob , die nur Zugriff auf ‚gelesen‘ wird der Zugriff oder ‚lesen 'und' schreiben 'Zugriff usw. Und, da diese Zugriffskontrollen in der Hardware implementiert sind, sind sie feste Garantien , dass die Zugriffsregeln nicht verletzt werden können. So können Plugins und Erweiterungen von anderen Autoren und Unternehmen, die in separaten Tabs/Prozesse laufen, nicht gegenseitig brechen.

Ein solches Design hat den Effekt, dass es die Wahrscheinlichkeit der Änderung von Code oder Daten, die nicht geändert werden sollten, minimiert. Dies ist für die Sicherheit Gründe und sorgt für einen zuverlässigeren, weniger fehlerhaften Code.

Die bloße Tatsache, dass Google so ein kompliziertes Design hat, ist für mich ein gutes Zeugnis zu Tatsache, dass Google scheint ein hervorragendes Verständnis für diese Konzepte zu haben und hat ein überlegenes Produkt gebaut. (Das heißt, als Web-Entwickler müssen wir immer noch unseren Web-Code mit mehreren Browsern testen. Und Browser wie Firefox, mit schon seit langer Zeit und mit einer hervorragenden Gruppe von Web-Entwickler bezogen 'hinzufügen -ons 'hat immer noch einige Vorteile für einige Aufgaben.)

Aber für die tägliche allgemeine Browser-Nutzung, für fast alle Aufgaben, ist der Chrome-Browser meine erste Wahl geworden. (Nur meine Meinung, und natürlich, YMMV.)

Verwandte Themen