5

Google Chrome et IE8 (entre autres) visent à fournir une plus grande fiabilité/stabilité en isolant chaque onglet (page web) dans un processus séparé (trop simplifié, je sais). Il semblerait que ce soit beaucoup plus lourd que plusieurs threads, mais a l'avantage majeur d'un crash dans un processus ne faisant pas tomber l'ensemble de l'application.Conception multi-processus Chrome/IE8, est-ce possible dans .NET?

Il semble que l'architecture de processus multiple a longtemps été utilisée dans les applications côté serveur (par exemple les serveurs Web), mais il s'agit de processus sans interface graphique dédiée. Il est intéressant qu'il soit maintenant utilisé dans les interfaces utilisateur des applications de bureau.

Comment est-ce que j'irais mettre en application ceci dans une application de Windows Forms .NET par exemple? Est-ce même possible? Process.Start() est un premier endroit évident à regarder, mais l'interface graphique du nouveau processus n'est pas étroitement intégrée à l'interface graphique de l'application hôte. C'est une nouvelle application autonome, pas un sous contrôle/fenêtre de l'application hôte, comme c'est le cas avec Chrome/IE8.

(Pour les personnes intéressées Scott Hanselmann a écrit une bonne introduction à la IE8 multi-process architecture here..)

[Mise à jour]

Plus précisément:

Comment un séparé "sous-processus" rendre directement à l'interface utilisateur dans le "processus principal"? Est-ce que c'est effectivement ce qui se passe, ou comme cela a été suggéré dans les commentaires, est-ce que le sous-processus utilise le CIP pour demander au processus principal de le rendre?

Répondre

3

Une meilleure option pour utiliser plusieurs processus dans .NET serait d'utiliser plusieurs AppDomains à la place. Cela a l'avantage de ne créer qu'un seul processus Windows réel, tout en donnant la stabilité supplémentaire de plusieurs zones (par exemple, un plantage dans un AppDomain ne ferait que réduire celui-ci, et non l'ensemble de l'application).

Des coûts sont associés à cela, car les objets doivent être sérialisés sur les limites AppDomain. Il pourrait être plus facile à développer qu'un modèle multi-processus, cependant.

+0

+1, en particulier les mises en garde de la communication entre les domaines. Cela peut être beaucoup plus coûteux que ce que les développeurs attendent parfois. –

+1

Can 2 AppDomains dans un processus unique mettre à jour l'interface utilisateur indépendamment, à savoir les onglets distincts? De plus, comme le dit Scott Hanselmann, il est toujours possible de faire tomber tout le processus d'un AppDomain. – Ash

+0

@Ash en supposant qu'un processus/AppDomain est le processus "GUI", chargé de recevoir des commandes d'autres processus et de les refléter; et en revenant à eux, pourquoi pas? –

5

Google Chrome utilise canaux nommés pour la communication entre processus.

Il y a quelques documents intéressants ici: http://dev.chromium.org/developers/design-documents

Pour plus d'informations sur les canaux nommés avec ".net" juste google.

@Ash: Les processus enfants sont en cours d'exécution dans Windows « Ordinateurs de bureau » séparé qui signifie qu'ils ont aucun moyen d'afficher quoi que ce soit. (Les ordinateurs de bureau sont une chose délicate ...) Je dois donc supposer que tout ce que les processus fils rendent doivent passer par IPC. Et puis le processus principal (?) L'affiche.

Je trouve que Windows "bureau" séparé chose ici: http://dev.chromium.org/developers/design-documents/multi-process-architecture

+0

Une idée sur la façon dont il implémente le côté de l'interaction GUI? – Ash

+0

Excellent liens sur Chrome, merci, – Ash

+0

Vous êtes les bienvenus. Je suis également très intéressé par cela. :) –

1

btw ...dup

Voir: Windows Forms application like Google Chrome with multiple processes (avec réponse de Jon Skeet: o)

(Je pense que cela répond à la partie trop "plus particulièrement")

+0

Merci encore. J'ai passé 5 minutes à chercher une question existante. J'ai également tapé divers titres dans la boîte de texte «Poser une question». Ceux-ci ne fonctionnent pas très bien dans mon expérience, oh bien. – Ash

+0

Je viens de jeter un coup d'œil à la case "Related" à droite: P –