Warum gibt es beim Öffnen einer Seite im Makrobrowser mindestens vier Prozesse?

Bild.png

Diese Kolumne erklärt hauptsächlich das zugrunde liegende Arbeitsprinzip des Browsers. In Anbetracht der Tatsache, dass ich Li Bings „Browser Working Principle and Practice“ auf Geek Time studiert habe, habe ich die Lernmaterialien sortiert und etwas von meinem eigenen Verständnis hinzugefügt, um eine Kolumne zu schreiben Hinweis zur Funktionsweise von Browsern. Ich glaube, dass Ihr Zweck, diesen Artikel zu öffnen, darin besteht, die Funktionsweise des Browsers zu verstehen und das Ausführungsprinzip des Browsers zu verstehen. Es wird Ihnen nicht nur im Interview helfen, sondern auch eine entsprechende Verarbeitung zur Optimierung der Front-End-Leistung vornehmen. , bitte geben Sie der Redaktion ein Like! ! . Schlagen Sie ohne Umschweife einfach das Buch auf.

Basierend auf einem der derzeit beliebtesten Browser konzentriert sich dieser Artikel hauptsächlich auf den Chrome-Browser. Lassen Sie uns zuerst einen Blick darauf werfen. Wenn wir eine Seite im Browser öffnen, sehen Sie, was im Task-Manager des Browsers verarbeitet wird. Wie nachfolgend dargestellt:

Bild.png

Wenn Sie das sehen, werden Sie vielleicht ein wenig verwirrt sein, warum ich nur eine Seite öffne und so viele Threads starten muss.Bevor Sie diese Frage beantworten, müssen Sie zunächst verstehen, was Prozesse und Threads sind.

Prozess und Faden

Prozess : Beschreibt CPU在运行指令und die erforderliche Zeit und stellt ein Programm in der Anwendung dar. .加载保存上下文是操作系统分配资源的最小单位

Ein Prozess ist eine laufende Instanz eines Programms . Die detaillierte Erklärung ist, dass das Betriebssystem beim Start eines Programms einen Speicherblock für das Programm zum Speichern 放代码、运行中的数据und Speichern erstellt.Wir 一个执行任务的主线程nennen eine solche Betriebsumgebung进程

Thread: Beschreibt 执行一段指令die benötigte Zeit, ein Thread ist eine kleinere Einheit in einem Prozess. 是CPU调度的最小单位。Es wird vom Prozess gestartet und verwaltet.

Zu beachten sind hier:线程是不能够脱离进程而独立存在的,但是每一个线程在进程中都是独立存在的。

Parallelverarbeitung

Die Parallelverarbeitung in einem Computer besteht darin, mehrere Aufgaben zum "gleichen Zeitpunkt" zu verarbeiten. Beispielsweise müssen wir die Werte der folgenden drei Ausdrücke berechnen und die Ergebnisse anzeigen.

A = 1 + 2
B = 20 / 5
C = 7 * 8

Unter der Annahme, dass die Ausführung hier Single-Threaded ist, teilen wir sie in Form von Aufgaben auf, bei denen es sich um die folgenden Prozesse handelt:

Aufgabe 1 : Berechne 1 + 2

Aufgabe 2 : Berechne 20/5

Aufgabe 3 : Berechne 7*8

Aufgabe 4 : Zeigen Sie das endgültige Berechnungsergebnis an

Unter der Annahme, dass hier Multithreading verwendet wird, kann der Prozess hier in zwei Teile geteilt werden: Erstens der Teil, der Berechnungen durchführt, dh Task 1, Task 2 und Task 3, und dann Task 4 ausführt, um die Berechnungsergebnisse anzuzeigen.

Auf diese Weise erfordert die Ausführung derselben Operation vergleichsweise 4 Schritte für einen einzelnen Thread und nur 2 Schritte für Multithreading.Haben Sie festgestellt, dass die Verwendung von Multithreading effizienter ist als Singlethreading? Daher 使用并行处理能够大大提升性能.

Für ein intuitiveres Verständnis ist unten ein Vergleichsdiagramm der beiden Situationen gezeichnet:

Bild.png

Wie aus der obigen Abbildung ersichtlich ist, ist der Faden an den Prozess angehängt, und 进程中使用多线程并行处理能够提升运算效率. Damit wird auch das oben erwähnte Thread-Konzept verifiziert.

Prozess vs. Thread

Im Allgemeinen hat die Beziehung zwischen Prozessen und Threads die folgenden vier Merkmale:

1. Ein Fehler in einem Thread des Prozesses führt zum Absturz des gesamten Prozesses.

Basierend auf dem obigen Beispiel können wir mit dieser Funktion ein Szenario simulieren:

A = 1 + 2
B = 20 / 5 --> 20 / 0
C = 7 * 8

Wenn ich den Wert in B berechne, wenn ich den Nenner von 5 auf 0 ändere, wenn der Thread zu B ausgeführt wird, wird zu diesem Zeitpunkt ein Fehler gemeldet, der den gesamten Prozess zum Absturz bringen wird.Natürlich die anderen beiden Threads ausführen Die Ergebnisse werden nicht angezeigt.

2. Teilen Sie Daten im Prozess zwischen Threads

Threads können gemeinsame Daten des Prozesses lesen und schreiben. Wie nachfolgend dargestellt:

Bild.png

Wie aus der obigen Abbildung ersichtlich ist, schreiben Thread 1, Thread 2 und Thread 3 die Ausführungsergebnisse jeweils in A, B und C, und dann liest Thread 2 Daten aus A, B und C, um die Ausführungsergebnisse anzuzeigen. Ergebnis.

3. Wenn ein Prozess geschlossen wird, fordert das Betriebssystem den von dem Prozess belegten Speicher zurück

Wenn ein Prozess beendet wird, fordert das Betriebssystem die vom Prozess angeforderten Speicherressourcen zurück.Selbst wenn ein darin enthaltener Thread aufgrund einer fehlerhaften Operation ein Speicherleck verursacht, wird der Speicher beim Beenden des Prozesses korrekt zurückgefordert.

Beispielsweise unterstützt der vorherige IE-Browser viele Plug-Ins, und diese Plug-Ins können leicht Speicherlecks verursachen, was bedeutet, dass die Speichernutzung zunehmen kann, solange der Browser noch geöffnet ist, aber wenn der Browserprozess geschlossen wird, Der Speicher wird vom System zurückgefordert.

4. Der Inhalt zwischen Prozessen ist voneinander isoliert

Die Prozessisolation soll verhindern, dass sich die Prozesse im Betriebssystem gegenseitig stören, und jeder Prozess kann nur auf die Daten zugreifen, die er besitzt, wodurch die Situation vermieden wird, in der ein Prozess Daten in einen B-Prozess schreibt. Da die Daten zwischen Prozessen voneinander isoliert sind, hat ein Absturz oder Hängenbleiben eines Prozesses keine Auswirkungen auf andere Prozesse. Wenn eine Datenkommunikation zwischen Prozessen erforderlich ist, ist zu diesem Zeitpunkt ein Interprozess-Kommunikationsmechanismus (IPC) erforderlich.

Mit den oben genannten Eigenschaften ist der Unterschied zwischen den beiden unten aufgeführt:

1. Ein Prozess kann als unabhängige Anwendung betrachtet werden, ein Thread jedoch nicht, und ein Thread muss an einen Prozess angehängt werden.Ein Prozess kann mehrere Threads haben.

2. Ein Prozess ist die kleinste Einheit der Ressourcenzuweisung, und ein Thread ist die kleinste Einheit der CPU-Planung.

3. Die Kommunikation zwischen Prozessen erfordert (IPC), und Threads können die Ressourcen desselben Prozesses direkt gemeinsam nutzen

4. Der Prozesswechsel ist teurer als der Threadwechsel

Denn wenn ein Prozess erstellt oder widerrufen wird, muss das System Ressourcen dafür zuweisen oder zurückfordern, wie z. B. Speicher, E/A usw., und sein Overhead ist viel größer als der des Erstellens oder Widerrufens von Threads. In gleicher Weise sind beim Wechseln von Prozessen 当前进程CPU环境einige 各种状态的保存zeitnahe 新调度进程状态Einstellungen erforderlich, die jedoch nur beim Wechseln von Threads gewährleistet werden müssen 存和设置少量的寄存器内容, und der Overhead ist relativ gering.

Jetzt, wo wir über den Prozess sprechen, müssen wir den Deadlock erwähnen Lassen Sie uns kurz darüber sprechen, was ein Deadlock ist, warum es passiert und wie man es vermeidet.

Sackgasse

Deadlock : Der sogenannte Deadlock bezieht sich auf einen Deadlock, der durch mehrere Prozesse verursacht wird, die während des Betriebs um Ressourcen konkurrieren.Wenn sich die Prozesse in diesem Deadlock-Zustand befinden, können sie sich nicht ohne äußere Kräfte fortbewegen.

Ressourcen werden im Betriebssystem in zwei Kategorien eingeteilt:

Entzugsbare Ressourcen

Dies bedeutet, dass, nachdem ein Prozess eine Ressource erhalten hat, die Ressource von anderen Prozessen oder Systemen entzogen werden kann.Sowohl CPU als auch Hauptspeicher sind entziehbare Ressourcen;

unveräußerliche Ressource

Wenn das System solche Ressourcen einem bestimmten Prozess zuweist, können sie nicht zwangsweise zurückgenommen werden, sondern können erst freigegeben werden, nachdem der Prozess beendet ist, wie z. B. Bandlaufwerke und Drucker.

Die Ursache des Deadlocks

(1) Wettbewerbsressourcen:

Konkurrenz um unveräußerliche Ressourcen (z. B. gibt es nur einen Drucker im System, der von Prozess P1 verwendet werden kann, vorausgesetzt, P1 hat den Drucker bereits belegt, wenn P2 den Drucker weiterhin zum Drucken auffordert, wird er blockiert)

Das Konkurrieren um temporäre Ressourcen (wie z. B. temporäre Ressourcen einschließlich Hardwareunterbrechungen, Signale, Nachrichten, Nachrichten im Puffer usw.), normalerweise in einer ungeeigneten Reihenfolge der Nachrichtenkommunikation, führt zu einem Deadlock.

(2) Die Fortschrittssequenz zwischen Prozessen ist illegal

Wenn P1 die Ressource R1 und P2 die Ressource R2 behält, befindet sich das System in einem unsicheren Zustand, da die beiden Prozesse sich vorwärts bewegen und ein Deadlock auftreten kann. (Beispiel: Wenn P1 zu P1: Request (R2) läuft, wird es blockieren, weil R2 bereits von P2 belegt ist, und wenn P2 zu P2: Request (R1) läuft, wird es ebenfalls blockieren, weil R1 bereits von P1 belegt ist.)

Notwendige Bedingungen für das Auftreten eines Deadlocks

1. Sich gegenseitig ausschließende Bedingungen : Der Prozess erfordert die exklusive Kontrolle über die zugewiesenen Ressourcen, dh eine bestimmte Ressource wird innerhalb eines Zeitraums nur von einem Prozess belegt. (Zum Beispiel: Es gibt zwei Prozesse oder Threads A und B, wobei A die Ressource R1 belegen muss und B die Ressource R2 belegen muss. Nur wenn A die Ressource R1 belegt, kann B die Ressource R2 belegen, andernfalls wird B blockiert und kann nicht weiter implementiert werden)

2. Anforderungs- und Haltebedingungen : Wenn der Prozess aufgrund der Anforderung von Ressourcen blockiert ist, lässt er die erhaltenen Ressourcen nicht los. (Wenn ein Thread oder Prozess eine bestimmte Ressource verwenden muss, muss er die Ressource anfordern und belegt die Ressource, bis er abgerufen wird.)

3. Nichtentzugsbedingungen : Die durch den Prozess gewonnenen Ressourcen können nicht entzogen werden, bevor sie aufgebraucht sind, und können nur von ihnen selbst freigegeben werden, wenn sie aufgebraucht sind. (Zum Beispiel: In einem System gibt es zwei Prozesse oder Threads A und B, wobei A die Ressourcen A und B besitzt und B die Ressourcen A und B benötigt, um die Ausführung fortzusetzen. Wenn A die Ressource A nicht freigibt, kann B keine Ressourcen erhalten A und B, also ist das System festgefahren)

4. Schleifenwartebedingung : bezieht sich auf den Zustand, in dem mehrere Ressourcen im System aufeinander warten, um eine bestimmte Ressource freizugeben, und diese Ressourcen müssen sich gegenseitig einschränken, so dass keine der Ressourcen freigegeben werden kann. (Zum Beispiel: Es gibt zwei Prozesse oder Threads in einem System, sie müssen jeweils zwei verschiedene Ressourcen A und B verwenden. Und sie warten darauf, dass die andere Partei die Ressource A oder B freigibt, dann gerät das System in einen Deadlock-Zustand , da die Ressource keinem Prozess oder Thread zugeordnet werden kann)

Deadlock-Präventionsmethode

1. Einmalige Zuweisung von Ressourcen: Alle Ressourcen werden auf einmal zugewiesen, sodass keine Anfragen mehr erfolgen. (Anforderungsbedingung zerstören)

2. Solange eine Ressource nicht zugewiesen werden kann, werden diesem Prozess keine anderen Ressourcen zugewiesen. (Zerstören der Anforderungshaltebedingung)

3. Entzugsfähige Ressourcen: Das heißt, wenn ein Prozess einige Ressourcen erhält, aber keine anderen Ressourcen erhalten kann, werden die belegten Ressourcen freigegeben. (Brechen der unveräußerlichen Bedingung)

4. Methode der geordneten Ressourcenzuweisung: Das System weist jedem Ressourcentyp eine Nummer zu, und jeder Prozess fordert Ressourcen in der Reihenfolge aufsteigender Nummer an, und das Gegenteil gilt für die Freigabe. (Wartebedingung für unterbrochene Schleife)

Die Ära der Single-Process-Browser

Nachdem wir den Prozess und den Thread verstanden haben, werfen wir einen Blick auf die Architektur eines Einzelprozess-Browsers: In den frühen Browsern 所有功能模块都是运行在同一个进程里的。umfassten die funktionalen Module des Browsers 网络、插件、JS引擎、渲染引擎、页面usw., und die frühen Browser waren alle Einzelprozess-Browser. Die Architektur eines Single-Process-Browsers ist in der folgenden Abbildung dargestellt:

Bild.pngSo viele funktionale Module laufen nur in einem Prozess, was zu instabilen, unsteten und unsicheren Faktoren in Einzelprozess-Browsern führt. Lassen Sie uns analysieren, warum diese Faktoren auftreten.

Problem 1: Instabil

在同一个进程中的任意一线程出错,都会导致整个进程崩溃。Wir wissen bereits, dass ein Single-Process-Browser alle Funktionsmodule in einem Prozess ausführt, was die zuvor erwähnten Merkmale zwischen Prozessen und Threads beinhaltet Frühe Browser benötigten verschiedene Plug-Ins, um Webvideos, Webspiele usw. zu implementieren, aber diese Plugins sind die fehleranfälligsten Module.

Neben Plug-Ins ist auch das Rendering-Engine-Modul instabil.Normalerweise können einige komplizierte JavaScript-Codes Fehler im Rendering-Engine-Modul verursachen. Wie bei Plugins,渲染引擎的出错也会导致整个浏览器的崩溃。

Problem 2: Nicht glatt

Wie aus dem obigen Diagramm der Einzelprozess-Browser-Architektur ersichtlich ist, laufen alle Page-Rendering-Module, JS-Engines und Plug-Ins im selben Thread, was bedeutet, dass jeweils nur ein Modul ausgeführt werden kann.

Stellen Sie sich vor, Sie führen eine Endlosschleife von JavaScript-Code aus

function freeze() {
    
    
    while (1) {
    
    
        console.log('qf')
    }
}
freeze();

Befindet sich dieser Code in einem Single-Process-Browser, kann man sich das in Kombination mit dem oben erwähnten Parallelverarbeitungsbeispiel vorstellen: Bei seiner Ausführung monopolisiert er den gesamten Seiten-Thread, wodurch andere Funktionen auf dem Modul von laufen der Thread Keine Chance, ausgeführt zu werden. 因为浏览器中所有的页面都运行在该线程中, sodass diese Seiten keine Möglichkeit haben, Aufgaben auszuführen, was dazu führt, dass der gesamte Browser nicht mehr reagiert und einfriert.

Zusätzlich dazu, JavaScript代码的执行dass 插件der Single-Process-Browser hängen bleibt, 内存泄漏ist die Seite auch ein wichtiger Grund für die Verlangsamung des Single-Prozesses. Normalerweise ist der Kernel eines Browsers sehr kompliziert. Wenn Sie eine komplexe Seite ausführen und dann die Seite schließen, kann der Speicher nicht vollständig wiederhergestellt werden. Dies führt dazu, dass je länger die Nutzungsdauer ist, desto höher der Speicherverbrauch und der Browser wird Langsamer.

Problem 3: Unsicher

Dies lässt sich anhand von zwei Aspekten von Plug-Ins und Seitenskripten erklären: Plug-Ins können in anderen Sprachen wie C/C++ geschrieben werden, und beliebige Ressourcen des Betriebssystems können über Plug-Ins abgerufen werden ein Plug-in, dh Mit diesem Plug-in können Sie Ihren Computer vollständig bedienen. Wenn es sich um ein schädliches Plug-in handelt, setzt es Viren frei, stiehlt Ihre Benutzerinformationen und verursacht Sicherheitsprobleme. (Das Plugin ist direkt mit dem Betriebssystem verbunden)

Seitenskripte können Systemrechte durch Browser-Schwachstellen erhalten. Nachdem diese Skripte Systemrechte erhalten haben, können sie auch einige schädliche Dinge auf Ihrem Computer anstellen, was ebenfalls Sicherheitsprobleme verursacht.

Die Ära der Multiprozess-Browser

Nun, da Multiprozess-Browser die oben genannten Probleme gelöst haben, wollen wir darüber sprechen, wie man sie offiziell löst.

Frühe Multi-Prozess-Architektur

Frühe Multi-Prozess-Architektur am Beispiel der 2008 vom Chrome-Browser veröffentlichten Prozessarchitektur: Bild.pngAus der Abbildung können wir ersehen, dass die Chrome-Seite in einem separaten Rendering-Prozess ausgeführt wird und die Plug-Ins in der Seite ebenfalls separat ausgeführt werden Dabei erfolgt die Kommunikation zwischen den Prozessen über den IPC-Mechanismus (Teil mit gepunkteter Linie).

Lösen Sie Problem 1 instabil

Wir wissen 每个进程都是独立的、相互隔离的, dass der Absturz einer Seite oder eines Plug-ins nur den aktuellen Seitenprozess oder Plug-in-Prozess betrifft und keine Auswirkungen auf den Browser und andere Seiten hat. Dies löst perfekt das Problem des Absturzes einer Seite oder eines Plug-ins bewirkt, dass auch der gesamte Browser abstürzt, was das Instabilitätsproblem löst.

Lösen Sie Problem 2 ist nicht glatt

In ähnlicher Weise wird die JavaScript-Engine auch im Rendering-Prozess ausgeführt, da 即使JavaScript代码阻塞了渲染进程,影响的只是当前渲染进程渲染的页面,而不会影响浏览器和其它页面的der JavaScript-Code anderer Seiten in ihren jeweiligen Rendering-Prozessen ausgeführt wird. Wenn wir den Endlosschleifencode in Chrome ausführen, reagiert daher nur die aktuelle Seite nicht.

Für das Problem der Speicherlecks gilt dasselbe, 当关闭页面的时候,对应的的渲染进程也会被关闭,之后该进程所占用的内存也会被系统回收sodass Sie das Problem der Speicherlecks in Browserseiten leicht lösen können.

Lösen Sie Problem 3 unsicher

所有的进程外面都有一层沙箱包裹Wir können aus der Abbildung ersehen, dass der aktuelle Rendering-Prozess von einer Sandbox umschlossen wird, nicht nur der Rendering-Prozess wird von einer Sandbox umschlossen, Sie können sich die Sandbox als eine Sperre des Betriebssystems für die Programme vorstellen Sandbox kann ausgeführt werden, kann jedoch keine Daten auf Ihre Festplatte schreiben oder einige vertrauliche Informationen lesen. Beispielsweise sperrt Chrome für Dokumente und Desktops auf Ihrer Festplatte den Plug-in-Prozess und den Rendering-Prozess in der Sandbox, sodass selbst dann, wenn bösartiger Code während des Rendering-Prozesses und des Plug-ins ausgeführt wird, der bösartige Code nicht durchbrechen kann Sandbox, um die Systemberechtigung zu erhalten.

Aktuelle Multiprozessarchitektur

Nachdem wir die frühere Mehrprozess-Browser-Architektur verstanden haben, werfen wir nun einen Blick auf die aktuelle Mehrprozess-Architektur. Das Folgende ist die neueste Chrome-Prozessarchitektur, wie unten gezeigt:

Bild.pngWie Sie der Grafik entnehmen können, enthält der neueste Chrome-Browser:1个浏览器主进程(Browser Process)、1个网络进程(NewWork Process)、1个GPU进程(GPU Process)、多个渲染进程(Render Process)、多个插件进程(Plugin Process)。

Lassen Sie uns die Funktionen dieser fünf Prozesse analysieren:

Browser-Prozess

Es ist hauptsächlich für die Seitenanzeige, Interaktion, Unterprozessverwaltung und Speicherfunktion verantwortlich.

Renderprozess

Es ist dafür verantwortlich, HTML, CSS und JavaScript in Seiten umzuwandeln, die Benutzer bedienen und mit denen sie interagieren können.Die Textsatz-Engine und die JavaScript-Engine V8 laufen beide in diesem Prozess. Jedes Mal, wenn eine neue Registerkarte geöffnet wird, wird ein Rendering-Prozess hinzugefügt, der aus Sicherheitsgründen in eine Sandbox eingeschlossen werden muss.

Der Rendering-Prozess besteht aus fünf Threads:

GUI-Rendering-Thread

Verantwortlich für das Rendern von Browserseiten, das Analysieren von HTML, CSS, das Erstellen von DOM-Bäumen, das Erstellen von CssStyle, das Erstellen von Rendering-Bäumen und das Zeichnen von Seiten; wenn die Schnittstelle neu gezeichnet oder neu angeordnet werden muss, wird dieser Thread ausgeführt.

注意: GUI渲染线程和JS引擎线程是互斥的, das heißt, der GUI-Rendering-Thread wird angehalten, wenn die JS-Engine ausgeführt wird, und die GUI-Aktualisierung wird in der Aufgabenwarteschlange gespeichert, um auf die Ausführung der JS-Engine zu warten, wenn sie sich im Leerlauf befindet.

JS-Engine-Thread

Verantwortlich für die Verarbeitung von JavaScript-Skripts, das Parsen von JavaScript-Skripts und das Ausführen von Codes. Der JS-Engine-Thread hat auf die Ankunft von Aufgaben in der Aufgabenwarteschlange gewartet und wechselt dann zur Aufgabenwarteschlange, um die Aufgabenausführung zu erhalten. Es gibt nur einen JS-Engine-Thread Ausführen von JS-Programmen auf einer Registerkarte.

注意: GUI渲染线程与JS引擎线程互斥, wenn die Ausführungszeit von JS zu lang ist, wird die Seitenwiedergabe nicht reibungslos, das heißt, die Seitenwiedergabe wird blockiert.

Event-Trigger-Thread

Enthält den Kern 事件循环(Event Loop)、事件源(点击事件等)、事件队列usw. Hier ist zu beachten, dass 事件触发线程是属于浏览器而不是JS引擎. Wenn die JS-Engine den Codeblock ausführt, fügt sie die entsprechende Aufgabe dem Ereignis-Trigger-Thread hinzu. Wenn die Trigger-Bedingung erfüllt ist, fügt der Thread das Ereignis der Warteschlange für ausstehende Aufgaben hinzu und wartet darauf, dass die JS-Engine es verarbeitet.

Timer-Trigger-Thread

Enthält setTimeout、setIntervalden Thread, in dem es sich befindet. Es sollte hier beachtet werden, dass der Browser-Timer-Zähler nicht von der JS-Engine gezählt wird, da die JS-Engine single-threaded ist, wenn der Thread blockiert wird, wirkt sich dies auf die Genauigkeit der Zählung aus, sodass ein separater Thread zum Zählen benötigt wird . Nach der angegebenen Zeit wird die Callback-Funktion zur Aufgabenwarteschlange hinzugefügt und ausgeführt, wenn die JS-Engine im Leerlauf ist.所以定时器的任务不一定能够准时的执行,定时器只是在指定的时间点将任务添加到任务事件队列中。

Hinweis: Das W3C legt im HTML-Standard fest, dass die Timerzeit nicht kleiner als 4 ms sein darf.Wenn sie kleiner als 4 ms ist, ist der Standardwert 4 ms.

Asynchroner HTTP-Anforderungs-Thread

Der Thread, der asynchrone Anforderungen verarbeitet, blockiert die Ausführung des Browsers nicht, führt jedoch weiterhin nachfolgenden Code aus, wenn die Anforderungsantwort zurückgegeben wird. Wenn Zustandsänderungen erkannt werden, ob eine Callback-Funktion gesetzt ist, wird sie in der Aufgabenwarteschlange hinzugefügt und wartet auf die Ausführung der JS-Engine.

GPU-Prozess

Am Anfang wurde der CPU-Prozess nur verwendet, um den Effekt von 3D-CSS zu erzielen, und dann verwendete der Chrome-Browser diesen Prozess, um die Seite zu zeichnen, und dieser Prozess beschleunigt das Rendern und die Grafikverarbeitung der Webseite, wodurch die Leistung verbessert wird und Benutzererfahrung der Webseite.

Am 26.4 dieses Jahres wird es offiziell an Chrome angebunden WebGPU(und ersetzt WebGL), was ein großer Trend für Browsergames sein wird. Diejenigen, die es wissen müssen, können die Informationen selbst überprüfen.

Netzwerkprozess (NewWork-Prozess)

verantwortlicher 页面网络资源的加载,处理页面浏览器请求和响应Prozess.

Plugin-Prozess

Es ist für den Betrieb des Plug-Ins verantwortlich, das verwendet wird, um die Funktionen des Browsers zu erweitern.Da das Plug-In keine Fehler machen kann, muss es durch einen separaten Prozess isoliert werden, um den Absturz des Prozesses zu vermeiden die Seite beeinflussen.

Ich glaube, wenn Sie dies sehen, werden Sie verstehen, warum der Browser nur eine Seite öffnet, warum es vier Prozesse gibt, weil das Öffnen einer Seite mindestens einen Browser-Hauptprozess, einen Netzwerkprozess und einen GPU-Prozess erfordert, 1 Rendering-Prozess, wenn die zu diesem Zeitpunkt geöffnete Seite ein Plug-in enthält, gibt es einen anderen Plug-in-Prozess.

Obwohl Multi-Prozess die Stabilität, Flüssigkeit und Sicherheit des Browsers verbessert, bringt es auch einige Probleme mit sich:

Höherer Ressourcenverbrauch . Da jeder Prozess eine Kopie der gemeinsamen Infrastruktur (z. B. der JavaScript-Laufzeitumgebung) enthält, bedeutet dies, dass der Browser mehr Speicherressourcen verbraucht.

Komplexere Architektur . Probleme wie eine hohe Kopplung zwischen Browsermodulen und eine schlechte Skalierbarkeit werden es der aktuellen Architektur erschweren, sich an neue Anforderungen anzupassen.

Um die oben genannten Probleme zu lösen, nutzt das Chrome-Team nun die Idee der „Service-Oriented Architecture (SOA)“, um eine neue Chrome-Architektur zu entwerfen. Refaktorieren Sie jedes Modul in einen unabhängigen Dienst (Service). Jeder Dienst kann in einem unabhängigen Prozess laufen, der Zugriff auf Dienste muss definierte Schnittstellen und Protokolle verwenden, über IPC kommunizieren und so 构建一个更内聚、低耦合、易于维护和扩展das System verbessern.

Asynchroner HTTP-Anforderungs-Thread und Netzwerkprozess

Wenn Sie das sehen, weiß ich nicht, ob Sie Zweifel haben, warum es im Rendering-Prozess einen asynchronen HTTP-Anforderungsthread gibt, sollten die Anforderungsdaten hier nicht im Netzwerkprozess sein? Wie erschien es im Rendering-Prozess? Ich habe auch solche Zweifel, und die entsprechenden Informationen haben den konkreten Grund nicht erklärt. Ich habe es nach meinen eigenen Vorstellungen geschrieben. Wenn es jemand weiß, können Sie es im Kommentarbereich mitteilen.

Asynchroner HTTP-Anforderungs-Thread

Üblicherweise wird im Haupt-Thread ein asynchroner Request-Processing-Thread gestartet, der für die Verarbeitung von HTTP-Requests zuständig ist. Der asynchrone HTTP-Request-Thread blockiert normalerweise nicht den Haupt-Thread, sondern verwaltet Statusänderungen während der Anfrageverarbeitung durch Ereignisse oder Nachrichtenwarteschlangen. Das Problem eines übermäßigen Fadenpooldrucks kann vermieden werden.

Netzwerkprozess

Verwenden Sie Multithread oder Multiprozess, um Netzwerkanfragen zu verarbeiten.Netzwerkprozesse verwenden normalerweise Sockets, um Netzwerkdatenpakete zu empfangen und zu verarbeiten, und leiten die Datenpakete zur Verarbeitung an entsprechende Prozesse weiter.

1. Wenn es einen Netzwerkprozess gibt, müssen die Daten beim Erhalt von Netzwerkdaten an den Renderprozess weitergeleitet werden, der hier beteiligt ist 进程之间的通信,开销大.

2. Der asynchrone HTTP-Request-Thread besteht darin, 请求处理完毕之后再异步通知主线程dass der Haupt-Thread weiterhin andere Aufgaben ausführen kann. während der Netzwerkprozess ist请求接收到时就开始处理,直到处理完成或者出错时才通知主线程。

3. Der asynchrone HTTP-Request-Thread unterscheidet sich vom Netzwerkprozess darin, dass er nicht der Hauptprozess zur Verarbeitung von Netzwerkanfragen ist, sondern ein asynchroner Thread zur Verarbeitung von HTTP-Requests. Wenn der Netzwerkprozess Netzwerkanforderungen verarbeitet, kann der asynchrone http-Anforderungs-Thread andere Anforderungen verarbeiten, um gleichzeitige Verarbeitungsfähigkeiten zu verbessern. Gleichzeitig 异步http请求线程不会阻塞渲染进程,而是继续执行其它任务, um auf Nutzeranfragen schnell reagieren zu können.

SOA-Architektur

SOA ist eine serviceorientierte Architektur, die auf einer verteilten Architektur basiert und verschiedene Geschäftsfunktionen in Services aufteilt und diese über definierte Schnittstellen und Protokolle verbindet. Bild.pngUnter Bezugnahme auf das Diagramm hier können Sie es durch einen Prozess ersetzen, jeder Prozess hat einen entsprechenden Dienst, und diese Dienste beeinflussen sich nicht gegenseitig.

Dies erklärt, warum die Bilder am Anfang des Artikels NetWork Service, Storage Service (Cache) usw. haben, was bedeutet, dass Chrome sich SOA angenähert hat. Unten sehen Sie das SOA-Prozessdiagramm für Chrome.

Bild.png

zu guter Letzt

Dieser Artikel beschreibt hauptsächlich die Entwicklungsgeschichte von Browsern, von frühen Einzelprozessbrowsern zu Mehrprozessbrowsern, und analysiert die Vor- und Nachteile von Einzelprozessbrowsern und Mehrprozessbrowsern sowie das aktuelle Chrome-Browserarchitekturmodell. Gleichzeitig enthält der Artikel auch eine teilweise Erklärung von Prozessen und Threads. Ich hoffe, es ist hilfreich für Sie, die Prinzipien von Browsern zu lernen!

Basierend auf dem oben erwähnten asynchronen HTTP-Anfrage-Thread, warum ist es im Rendering-Prozess und nicht im Netzwerkprozess, hoffe ich, dass mir jemand helfen kann, es zu beantworten! !

Acho que você gosta

Origin blog.csdn.net/qq_34626094/article/details/130517077
Recomendado
Clasificación