2010-01-07 14 views
36

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.¿Cómo puede Google Chrome aislar pestañas en procesos separados mientras se ve como una sola aplicación?

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?

Estoy haciendo esta pregunta porque estoy diseñando 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.

+1

¡Descargue la fuente y vea! Esto sería de gran beneficio para usted si necesita una solución similar. Google Chrome es de código abierto. – Conor

+0

Mi compra de la fuente de Chromium es de 19.7 GB y 545.764 archivos. Los [enlaces destacados arriba] (http://dev.chromium.org/developers/design-documents/process-models) serán mucho más rápidos de realizar. –

Respuesta

42

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

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

Navegador: Solo hay un proceso de navegador, que administra 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 visualización, 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 de los cuales es responsable de la representación de las 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.

Plug-ins: 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: Multi-process Architecture

+1

No lo entiendo Parece que estas pestañas pertenecen al proceso del navegador, ¿cómo podrían estos renderizados dibujar y el texto en una pestaña pertenece a otro proceso? – ablmf

+4

No pertenecen al proceso del navegador. El proceso del navegador simplemente los administra (los crea, los detiene y los supervisa).El proceso del navegador también crea la GUI del navegador, pero la lógica interna de las pestañas (la parte arriesgada que es vulnerable a bloqueos) es manejada por los procesos de procesamiento independientes (uno para cada pestaña). –

+1

¡Gran resumen! Una cosa para agregar, cada extensión de Chrome se ejecuta en su propio proceso. Si desea saber cómo se comunican los procesos, eche un vistazo a la sección de IPC en la base de código fuente de Chromium. –

0

mayor parte del trabajo de hacer una página web es averiguar exactamente dónde van las cosas (es decir, dónde colocar cada imagen, el color que debe representar cada fragmento de 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 de video sdk. 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.

+1

En cuanto a su primer párrafo, me doy cuenta de que Chrome no está haciendo esto, pero la técnica no es diferente de OLE. Tiene un documento de Word con un documento de Excel incrustado. Inicie Excel haciendo clic con el botón derecho en la hoja de cálculo en Word y seleccionando Abrir. El proceso de Excel se inicia para editar el documento en un proceso separado. Ahora, si escribe algo en Excel, verá que cambia en el lado de Word en tiempo real. La forma en que esto funciona es que hay un renderizador específico de Excel ejecutándose dentro de Word que habla entre procesos (usando COM IDataObject) para llegar a los datos a dibujar. – zumalifeguard

+1

OLE es una arquitectura de llamada a procedimiento remoto (RPC). De hecho, RPC es una forma de que dos procesos se comuniquen entre sí en la misma máquina (sin embargo, ha caído en desgracia en los últimos años). – speedplane

-2

objetos de ventana - las áreas rectangulares pequeños, dibujable utilizados para implementar los widgets, no lo que el usuario ve como una ventana - puede perfectamente ser compartida entre los procesos, utilizando compartida memoria o el protocolo X. Verifique los documentos de su kit de herramientas.

+0

cada HWND pertenece a un proceso particular – zumalifeguard

+0

@zuma que no contradice lo que escribí. – Tobu

0

me acaba de dar la primera respuesta (la explicación de 'navegador' vs 'renders' vs 'plugins' un alza ... que parece el más completo y tiene mucho sentido para mí.

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

Diseñar para que los componentes individuales tengan su código en procesos separados permite los procesos del sistema operativo para 'proteger memorias' de forma accidental (o a propósito) modificando cada uno de maneras no explícitamente diseñadas.

Las únicas partes de un diseño tal que puede tanto leer y escribir datos compartidos son aquellos partes que están diseñados a tener que acceder a esos datos, y permite el control de si que el acceso es sólo 'leer' el acceso o 'leer 'y' escribir 'acceso, etc. Y, desde esos controles de acceso se implementan en el hardware, son garantías firmes 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 .

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 hace que el código sea 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 hecho de que Google parece tener una excelente comprensión de estos conceptos y tiene construido un producto superior. (Dicho esto, como desarrollador web, aún debemos probar nuestro código web con varios navegadores. Y, los navegadores como Firefox, que tienen han existido durante mucho tiempo y tienen un excelente grupo de desarrolladores web relacionados con 'agregar -ons '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. (Sólo mi opinión, y por supuesto, YMMV.)

Cuestiones relacionadas