5

Google Chrome と IE8 (とりわけ) は、各タブ (Web ページ) を個別のプロセスに分離することで、より高い信頼性/安定性を提供することを目指しています (単純化しすぎていることは承知しています)。

これは複数のスレッドよりもはるかに重いように見えますが、1 つのプロセスでクラッシュしてもアプリケーション全体がダウンしないという大きな利点があります。

複数プロセス アーキテクチャは、サーバー側アプリケーション (Web サーバーなど) で長い間使用されてきたようですが、これらは専用の GUI を持たないプロセスです。現在、デスクトップ アプリケーションのユーザー インターフェイスに採用されていることは興味深いことです。

Windows Forms .NET アプリケーションなどでこれを実装するにはどうすればよいでしょうか。それは可能ですか?

Process.Start() は明らかに最初に確認する場所ですが、新しいプロセスの GUI はホスト アプリケーションの GUI と緊密に統合されていません。Chrome/IE8 のように、ホスト アプリケーションのサブ コントロール/ウィンドウではなく、新しいスタンドアロン アプリケーションです。

(興味のある方は、Scott Hanselmann がIE8 のマルチプロセス アーキテクチャに関する優れた紹介をここに書いています。)

[アップデート]

すなわち:

別の「サブプロセス」を「メイン プロセス」内の UI に直接レンダリングするにはどうすればよいですか? これは実際に起こっていることですか、それともコメントで示唆されているように、サブプロセスは IPC を使用してメイン プロセスにレンダリングを依頼しますか?

4

3 に答える 3

5

Google Chrome は、プロセス間通信に名前付きパイプを使用しています。

ここにいくつかの興味深いドキュメントがあります: http://dev.chromium.org/developers/design-documents

「.net」を使用した名前付きパイプの詳細については、Google で検索してください。

@Ash: 子プロセスは別の Windows "デスクトップ"で実行されています。つまり、何も表示する方法がありません。(デスクトップは難しいものです...) したがって、子プロセスがレンダリングするものはすべて IPC を通過する必要があると想定する必要があります。そして、main(?) プロセスがそれを表示します。

ここで別のWindows「デスクトップ」を見つけました: http://dev.chromium.org/developers/design-documents/multi-process-architecture

于 2009-03-10T03:02:27.237 に答える
3

.NET で複数のプロセスを使用するためのより良いオプションは、代わりに複数の AppDomains を使用することです。これには、実際の Windows プロセスを 1 つだけ作成するだけで、複数の領域の安定性が向上するという利点があります (つまり、1 つの AppDomain でクラッシュが発生しても、アプリ全体ではなく、その 1 つだけがダウンします)。

オブジェクトは AppDomain 境界を越えてシリアル化する必要があるため、これにはコストがかかります。ただし、マルチプロセス モデルよりも開発が簡単かもしれません。

于 2009-03-10T03:02:15.787 に答える
1

ところで...重複

参照:複数のプロセスを持つ Google Chrome のような Windows フォーム アプリケーション(Jon Skeet からの回答付き :o )

(これは「より具体的に」の部分にも答えていると思います)

于 2009-03-10T03:56:36.967 に答える