architecture browser google-chrome multiprocess

architecture - ¿Cómo puede Google Chrome aislar pestañas en procesos separados mientras se ve como una sola aplicación?



browser google-chrome (5)

Nos han dicho que Google Chrome ejecuta cada pestaña en un proceso separado. Por lo tanto, un bloqueo en una pestaña no causaría problemas en las otras pestañas.

AFAIK, los procesos múltiples se utilizan principalmente en programas sin una GUI. Nunca he leído ninguna técnica que pueda incorporar múltiples procesos de GUI en una sola.

¿Cómo lo hace Chrome?

Hago esta pregunta porque estoy diseñando un software de CCTV que utilizará decodificadores de video SDK de múltiples fabricantes de cámaras, algunos de los cuales están lejos de ser estables. Por lo tanto, prefiero ejecutar estos SDK en diferentes procesos, lo que pensé es similar a Chrome.


Acabo de dar la primera respuesta (la que explica ''browser'' versus ''renderers'' versus ''plugins'' un uptick ... que parece ser la más completa y tiene mucho sentido para mí.

Lo único que agregaré son solo algunos comentarios más sobre POR QUÉ el diseño de Google es como es, y dar una opinión sobre por qué siempre ha sido mi primera opción para un navegador general / diario. (Aunque me doy cuenta de que CÓMO (y no POR QUÉ) se formuló la pregunta).

El diseño de modo que los componentes individuales tengan su código en procesos separados permite que el sistema operativo proteja los procesos accidentalmente (o a propósito) de forma mutuamente no explícitamente diseñada.

Las únicas partes de dicho diseño que pueden leer y escribir datos compartidos son aquellas partes diseñadas para NECESITAR el acceso a esos datos, y permiten controlar si ese acceso es solo de acceso de "lectura" o acceso de "lectura" y "escritura" , etc. Y, dado que esos controles de acceso se implementan en el hardware, son firmes garantías de que las reglas de acceso no se pueden violar. Por lo tanto, los complementos y extensiones de otros autores y compañías, que se ejecutan en pestañas / procesos separados, no se pueden romper entre sí.

Tal diseño tiene el efecto de que minimiza las posibilidades de cambiar algún código o datos que no fueron diseñados para ser cambiados. Esto es por razones de seguridad y brinda un código más confiable y menos problemático.

El mero hecho de que Google tiene un diseño tan intrincado es, para mí, un buen testimonio de que Google parece tener una excelente comprensión de estos conceptos y ha creado un producto superior. (Dicho esto, como desarrollador web, aún debemos probar nuestro código web con múltiples navegadores. Y los navegadores como Firefox, que han existido durante mucho tiempo y tienen un excelente grupo de ''complementos'' relacionados con desarrolladores web). todavía tiene algunas ventajas para algunas tareas).

Pero, para el uso diario general del navegador, para casi todas las tareas, el navegador Chrome se ha convertido en mi primera opción. (Solo mi opinión, y por supuesto, YMMV.)


Básicamente, utilizan otro proceso que los une a todos en la GUI.

Google Chrome crea tres tipos de procesos diferentes: navegador, procesadores y complementos.

Navegador: solo hay un proceso de navegador que gestiona las pestañas, ventanas y "cromo" del navegador. Este proceso también maneja todas las interacciones con el disco, la red, la entrada del usuario y la pantalla, pero no intenta analizar ni representar ningún contenido de la web.

Representantes: el proceso del navegador crea muchos procesos de representación, cada uno responsable de representar páginas web. Los procesos del procesador contienen toda la lógica compleja para manejar HTML, JavaScript, CSS, imágenes, etc. Chrome logra esto usando el motor de renderizado WebKit de código abierto, que también es utilizado por el navegador web Safari de Apple. Cada proceso de renderización se ejecuta en un entorno limitado, lo que significa que casi no tiene acceso directo al disco, la red o la pantalla. Todas las interacciones con las aplicaciones web, incluidos los eventos de entrada del usuario y la pintura de la pantalla, deben pasar por el proceso del navegador. Esto permite que el proceso del navegador controle los procesadores para detectar actividad sospechosa, matándolos si sospecha que se ha producido un exploit.

Complementos: el proceso del navegador también crea un proceso para cada tipo de complemento que esté en uso, como Flash, Quicktime o Adobe Reader. Estos procesos solo contienen los complementos, junto con un código de pegamento que les permite interactuar con el navegador y los procesadores.

Fuente: Chromium Blog: Arquitectura multiproceso



La mayor parte del trabajo de renderizar una página web es averiguar dónde van exactamente las cosas (es decir, dónde colocar cada imagen, de qué color se trata cada parte del texto). Ese trabajo se hace en un proceso separado. Una vez que el proceso separado ha calculado dónde va todo, pasa esa información al proceso principal de Chrome que dibuja todos los elementos en la pantalla.

No está claro exactamente cómo está configurado su sistema sdk de video. Pero podría tener un proceso que descomprima el video y otro proceso que lo represente. Sin embargo, es muy probable que estés usando OpenGL o DirectX. Esas APIs imponen algunas limitaciones sobre cómo dividir las cosas entre diferentes procesos.


Los objetos de ventana (las pequeñas áreas rectangulares dibujables utilizadas para implementar widgets, no lo que el usuario ve como una ventana) se pueden compartir perfectamente entre procesos, utilizando la memoria compartida o el protocolo X. Verifique los documentos de su kit de herramientas.