5

Google Chrome e IE8 (entre otros) tienen como objetivo proporcionar una mayor fiabilidad/estabilidad mediante el aislamiento de cada pestaña (página web) en un proceso separado (sobre simplificado, lo sé).Diseño multiproceso de Chrome/IE8, ¿es posible en .NET?

Esto parece ser mucho más pesado que varios hilos, pero tiene el beneficio principal de un bloqueo en un proceso que no reduce toda la aplicación.

Parece que la arquitectura de procesos múltiples se ha utilizado durante mucho tiempo en aplicaciones del lado del servidor (por ejemplo, servidores web), pero estos son procesos sin una GUI dedicada. Es interesante que ahora se esté utilizando en las interfaces de usuario de las aplicaciones de escritorio.

¿Cómo podría implementar esto en, por ejemplo, una aplicación Windows Forms .NET? ¿Es posible?

Process.Start() es un primer lugar obvio para buscar, pero la GUI del nuevo proceso no está estrechamente integrada con la GUI de la aplicación de host. Es una nueva aplicación independiente, no un sub control/ventana de la aplicación de host, como lo es con Chrome/IE8.

(Para todos los interesados ​​a Scott Hanselmann escribió una buena introducción a la IE8 multi-process architecture here..)

[Actualización]

Más específicamente:

¿Cómo puede un "sub-proceso" separada rendir directamente a la UI dentro del "proceso principal"? ¿Es esto realmente lo que está sucediendo, o como se sugirió en los comentarios, el subproceso usa el IPC para pedirle al proceso principal que lo represente?

Respuesta

3

Una mejor opción para usar múltiples procesos en .NET sería usar múltiples AppDomains en su lugar. Esto tiene la ventaja de que solo crea un proceso de Windows real, pero brinda la estabilidad adicional de varias áreas (es decir, un bloqueo en un AppDomain solo lo eliminaría, no toda la aplicación).

Hay costos asociados con esto, ya que los objetos deben ser serializados en AppDomain-boundaries. Sin embargo, podría ser más fácil de desarrollar que un modelo multiproceso.

+0

1, especialmente las advertencias de comunicación entre dominios. Eso puede ser mucho más costoso de lo que los desarrolladores a veces esperan. –

+1

¿Pueden 2 AppDomains en un solo proceso actualizar la interfaz de usuario de forma independiente, es decir, pestañas separadas? Además, como dice Scott Hanselmann, aún es posible reducir todo el proceso desde un dominio de aplicación. – Ash

+0

@Ash asumiendo un proceso/AppDomain es el proceso "GUI", responsable de recibir comandos de otros procesos y reflejarlos; y eventing regreso a ellos, ¿por qué no? –

5

Google Chrome está utilizando llamadas canalizaciones para la comunicación entre procesos.

Hay algunos documentos interesantes aquí: http://dev.chromium.org/developers/design-documents

Para obtener más información sobre canalizaciones con nombre con ".net" búscalo en google.

@Ash: El niño procesos se están ejecutando en ventanas separadas "escritorios" lo que significa que no tienen manera de mostrar nada. (Los escritorios son algo complicado ...) Así que debo asumir que todo lo que el niño procesa representa debe pasar por IPC. Y luego el proceso principal (?) Lo muestra.

me encontré con que separada "Escritorio" Windows cosa aquí: http://dev.chromium.org/developers/design-documents/multi-process-architecture

+0

¿Alguna idea sobre cómo implementa el lado de interacción de GUI? – Ash

+0

Excelentes enlaces en Chrome, gracias, – Ash

+0

De nada. También estoy muy interesado en esto. :) –

1

por cierto ...dup

Ver: Windows Forms application like Google Chrome with multiple processes (con respuesta de Jon Skeet: o)

(creo que esto responde a la parte "más específicamente" también)

+0

Gracias de nuevo. Pasé 5 minutos buscando una pregunta existente. También escribí varios títulos en el cuadro de texto "Preguntar". Estos no funcionan muy bien en mi experiencia, bueno. – Ash

+0

Acabo de echar un vistazo rápido al recuadro "Relacionado" a la derecha: P –

Cuestiones relacionadas