Le contenu de cet article est une introduction aux processus et aux fils de discussion du navigateur. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Processus
Un processus est la plus petite unité d'allocation de ressources CPU.
Processus multiples : le multi-processus fait référence au fait que deux processus ou plus peuvent s'exécuter simultanément sur le même système informatique. Les avantages de plusieurs processus sont évidents. Par exemple, vous pouvez ouvrir un éditeur et saisir du code tout en écoutant de la musique, et les processus de l'éditeur et du logiciel d'écoute de musique n'interféreront pas du tout.
Les navigateurs sont multi-processus. Les processus du navigateur comprennent principalement les types suivants :
Processus du navigateur : le processus principal du navigateur (Responsable pour la coordination et le contrôle principal)
Processus de plug-in tiers : Chaque type de plug-in correspond à un processus, qui n'est créé que lorsque le plug-in est utilisé
Processus GPU : au plus un, utilisé pour le dessin 3D
Processus de rendu du navigateur (noyau) : Par défaut, un processus par page d'onglet, ne s'affecte pas les uns les autres, Contrôlez le rendu des pages, l'exécution du script, le traitement des événements, etc. (parfois optimisé, par exemple, plusieurs onglets vierges seront fusionnés en un seul processus)
Lors de la navigation sur le Web, ouvrez-en plusieurs nouvelles en même temps Page, cela nécessite d'ouvrir plusieurs fenêtres de navigation, mais une fois plus d'une douzaine de fenêtres ouvertes, l'ensemble de l'ordinateur deviendra de plus en plus lent.
Avantages des navigateurs multi-processus
Évitez que le rendu des pages n'affecte l'ensemble du navigateur
Empêchez les plug-ins tiers d'affecter l'ensemble du navigateur
Plusieurs processus exploitent pleinement les avantages du multicœur
Il est pratique d'utiliser le modèle sandbox pour isoler le plug-in et d'autres processus afin d'améliorer la stabilité du navigateur
Dans En termes simples, si l'utilisateur ouvre plusieurs fenêtres, si l'une des fenêtres plante. Si elle est supprimée, cela n'affectera pas l'ensemble du navigateur et les autres interfaces fonctionneront toujours normalement
Threads
Un processus est constitué d'un ou plusieurs threads Composition, les threads sont différentes routes d'exécution de code dans un processus
Les processus sont indépendants les uns des autres ; , mais l'espace mémoire du programme (y compris les segments de code, l'ensemble de données, le tas, etc.) et certaines ressources au niveau du processus (telles que les fichiers ouverts et les signaux).
Le processus de rendu du navigateur (noyau du navigateur) est multithread et appartient principalement aux catégories suivantes :
Sujet GUI
Thème du moteur Javascript
Thème de déclenchement d'événement
Thème du minuteur
Fil de demande réseau
Fil GUI
est responsable du rendu des éléments HTML de l'interface du navigateur lorsque l'interface est présente. le thread sera exécuté lorsque la repeinture est requise ou que la redistribution est provoquée par une opération. Pendant que le moteur Javascript exécute le script, le thread de rendu de l'interface graphique est dans un état suspendu, ce qui signifie qu'il est "gelé".
Le thread du moteur Javascript
peut également être utilisé. être utilisé Appelé noyau JS, il est principalement responsable du traitement des programmes de script Javascript, tels que le moteur V8. Le thread du moteur Javascript est bien entendu chargé d’analyser les scripts Javascript et d’exécuter les codes.
Javascript est monothread
Cela est dû à la mission de naissance du langage de script Javascript : JavaScript gère l'interaction de l'utilisateur sur la page et exploite l'arborescence DOM , arborescence de styles CSS pour présenter aux utilisateurs une expérience interactive dynamique et riche et un traitement interactif de la logique du serveur. Si JavaScript est un moyen multithread d'exploiter ces interfaces utilisateur DOM, des conflits dans les opérations de l'interface utilisateur peuvent survenir ; Si Javascript est multithread, sous interaction multithread, le nœud DOM dans l'interface utilisateur peut devenir une ressource critique. Supposons qu'il y ait deux threads exploitant un DOM en même temps, l'un responsable de la modification et l'autre de la suppression, puis de la navigation. est requis à ce moment-là. Le processeur détermine comment prendre en compte les résultats de l'exécution du thread. Bien sûr, nous pouvons résoudre le problème ci-dessus grâce aux verrous. Mais afin d'éviter une plus grande complexité causée par l'introduction de verrous, Javascript a choisi dès le départ une exécution monothread.
Le fil de rendu de l'interface graphique et le fil du moteur JavaScript s'excluent mutuellement !
Puisque JavaScript peut manipuler le DOM, si vous modifiez les attributs de ces éléments lors du rendu de l'interface (c'est-à-dire que le thread JavaScript et le thread UI s'exécutent en même temps), les données d'élément obtenues avant et après le fil de rendu peuvent être incohérents. Par conséquent, afin d'éviter des résultats de rendu inattendus, le navigateur définit le thread de rendu de l'interface graphique et le moteur JavaScript pour qu'ils aient une relation mutuellement exclusive. Lorsque le moteur JavaScript est exécuté, le thread de rendu de l'interface graphique sera suspendu et les mises à jour de l'interface graphique seront enregistrées dans un fichier. file d'attente jusqu'à ce que le thread du moteur soit inactif est exécuté immédiatement.
JS bloque le chargement de la page
Étant donné que le fil de rendu GUI et le fil d'exécution JavaScript s'excluent mutuellement, lorsque le navigateur exécute le programme JavaScript, le fil de rendu GUI le fera est enregistré dans une file d'attente et ne sera exécuté que lorsque le programme JS sera terminé. Par conséquent, si le temps d’exécution de JS est trop long, le rendu de la page sera incohérent, donnant l’impression que le rendu et le chargement de la page sont bloqués.
Fil de déclenchement chronométré
Le compteur de synchronisation du navigateur n'est pas pris en compte par le moteur JavaScript, car le moteur JavaScript est monothread. S'il est dans un état de thread bloqué, cela affectera la précision du timing. Il est donc plus raisonnable de chronométrer. et déclenchez le timing via un plan de thread séparé.
Fil de déclenchement d'événement
Lorsqu'un événement est déclenché, le fil ajoutera l'événement à la fin de la file d'attente en attente et attendra son traitement par le moteur JS. Ces événements peuvent provenir du bloc de code actuellement exécuté, comme des tâches planifiées, ou d'autres threads du noyau du navigateur, comme des clics de souris, des requêtes asynchrones AJAX, etc. Cependant, en raison de la relation monothread de JS, tous ces événements ont être mis en file d'attente et attendu pour être traité par le moteur JS.
Fil de requête http asynchrone
Une fois XMLHttpRequest connecté, il ouvre une nouvelle demande de fil via le navigateur Lorsque le changement d'état est détecté, si une fonction de rappel est définie. , Le thread asynchrone génère un événement de changement d'état et le place dans la file d'attente de traitement du moteur JavaScript pour attendre le traitement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!