Wie kann Google Chrome isolieren tabs in separate Prozesse während der Blick wie eine einzelne Anwendung?
Uns wurde gesagt, dass Google Chrome läuft jeder tab in einem separaten Prozess. Daher ist ein Absturz in einem tab würde nicht dazu führen, Probleme in den anderen tabs.
AFAIK, multi-Prozesse werden meist bei Programmen ohne GUI. Ich habe nie irgendeine Technik, könnte das einbetten mehrerer GUI-Prozesse in einem einzigen.
Wie sich Chrome tun?
Ich Stelle diese Frage, weil ich am entwerfen von CCTV-software, die video-Decodierung-SDKs, die aus mehreren Kamera-Hersteller, von denen einige weit von stable. Also ich ziehe es vor, diese SDKs in verschiedenen Prozessen, die ich dachte, ist ähnlich wie Chrome.
- Laden Sie die Quell-und sehen ! Dies wäre von großem nutzen für Sie, wenn Sie müssen eine ähnliche Lösung. Google Chrome ist open source.
- Meine Kasse der Chrom-Quelle von 19,7 GB und 545,764-Dateien. links oben herausgestellten wird viel schneller sein, um durch zu gehen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Grunde, verwenden Sie einen anderen Prozess, klebt Sie alle zusammen in der GUI.
Google Chrome erstellt drei verschiedene Arten von Prozessen: browser, Renderer und plugins.
Browser: Es gibt nur eine browser-Prozess für die Verwaltung der tabs, windows und "chrome" des Browsers. In diesem Prozess übernimmt auch alle Interaktionen mit der Festplatte, network, user input und display, aber es macht keinen Versuch, zu analysieren und Rendern von Inhalten aus dem web.
Renderer: Der browser-Prozess schafft viele renderer-Prozesse, die jeweils verantwortlich für die Erbringung von web-Seiten. Die renderer-Prozesse beinhalten alle komplexe Logik für den Umgang mit HTML, JavaScript, CSS, Bilder, und so weiter. Chrome erreicht dies mithilfe des open-source-rendering-engine WebKit, die auch Apple ' s Safari web browser. Jeder renderer-Prozess in einer sandbox laufen lassen, was bedeutet, es hat fast keinen direkten Zugriff auf die Festplatte, das Netzwerk oder display. Alle Interaktionen mit web-apps, einschließlich user-input-events und Leinwand malen, muss über den browser-Prozess. Dadurch kann der browser-Prozess-monitor, der Renderer für verdächtige Aktivitäten, Sie zu töten, wenn es den Verdacht hegt, ein exploit aufgetreten ist.
Plugins: Der browser-Prozess schafft auch einen Prozess für jede Art von plug-in im Einsatz ist, wie Flash, Quicktime oder Adobe Reader. Diese Prozesse enthalten die plugins selbst, zusammen mit etwas glue-code, lassen Sie Sie mit dem browser interagieren und Renderer.
Quelle: Chromium-Blog: Multi-Prozess-Architektur
In diesem Zusammenhang das grundlegende design ist interessant.
Hier sind die relevanten design-Dokumente, insbesondere die multi-Prozess-Architektur Abschnitt.
Eine übersicht über die Architektur:
Großteil der Arbeit der rendering einer Webseite ist es, herauszufinden, wo genau die Dinge gehen (also dort, wo jedes Bild, welche Farbe zu Rendern jedes Stück text). Die Arbeit erfolgt in einem gesonderten Prozess. Sobald der separate Prozess hat herausgefunden, wo alles geht, es geht, die Informationen auf der Haupt-Chrome-Prozess zeichnet alle Elemente auf dem Bildschirm.
Es ist nicht klar, genau wie dein video sdk system-setup. Aber Sie können einen Prozess, dekomprimiert die video-und ein anderer Prozess macht, dass es auf dem display. Die meisten jedoch wahrscheinlich, Sie mit opengl oder DirectX. Diese APIs smay zu verhängen einige Einschränkungen auf, wie Sie teilen Sie die Dinge unter unterschiedlichen Prozessen.
Ich gab nur die erste Antwort (die einem erklärt, 'browser' vs 'Renderer' vs 'plugins'
einen Aufwärtstrend...das scheint den meisten vollständige und macht guten Sinn für mich.
Das einzige, was ich hinzufügen, sind nur ein paar Kommentare mehr darüber, WARUM Google ' s design
ist so, wie es ist, und geben Sie eine Stellungnahme darüber, warum es immer meine erste Wahl
für eine Allgemeine/jeden-Tag-browser. (Auch wenn ich erkennen, dass Sie, WIE (und nicht WARUM) war
die Frage, die gestellt wurde.)
Entwerfen, so dass einzelne Komponenten haben Ihren code in separate Prozesse ermöglicht
das OS'memory-schützen " - Prozesse aus versehen (oder absichtlich) ändern jede
anderen in einer Weise, die nicht ausdrücklich vorgesehen-in.
Nur die Teile ein design, das können beide Lesen und schreiben freigegebene Daten handelt, die
Teile, die entworfen sind, BENÖTIGEN Zugriff auf diese Daten und ermöglicht eine Steuerung auf, ob
dass der Zugang ist nur 'Lesen' - Zugriff oder 'Lesen' und 'schreiben' access, etc. Und da
diese Zugangskontrollen sind in hardware implementiert ist, sind Sie Feste Garantien
dass die access-Regeln nicht verletzt werden. Also, plugins und Erweiterungen
von anderen Autoren und Unternehmen, laufen in separaten tabs/Prozesse, nicht
brechen jede andere.
Solch ein design hat den Effekt, Sie minimiert die Chancen der Veränderung
einige von code oder Daten, die nicht geändert werden. Dies ist für die Sicherheit
Gründe und sorgt für zuverlässiger, weniger buggy code.
Die bloße Tatsache, Google hat so eine komplizierte Konstruktion ist, für mich, gutes Zeugnis
Tatsache, dass Google scheint über ein sehr gutes Verständnis von diesen Konzepten und hat
gebaut, ein überlegenes Produkt. (Das heißt, als web-developer, die wir noch testen müssen
unsere web-code mit mehreren Browsern. Und Browser wie Firefox, mit
herum für eine lange Zeit und haben eine ausgezeichnete Gruppe von web-Entwickler-im Zusammenhang
'add-ons' hat noch einige Vorteile für einige Aufgaben.)
Aber für den täglichen Gesamt-browser verwenden, für fast alle Aufgaben, die Chrome-browser
hat sich meine erste Wahl. (Nur meine Meinung, und natürlich, YMMV.)
Fenster - Objekte-klein, drawable rechteckige Bereiche zum implementieren von widgets, nicht das, was der Benutzer sieht, wie ein Fenster - kann perfekt genutzt werden, Prozesse, die mit shared memory oder das X-Protokoll. Überprüfen Sie Ihre toolkit docs.