代码之家  ›  专栏  ›  技术社区  ›  Ash

Chrome/IE8多进程设计,在.NET中是否可行?

  •  5
  • Ash  · 技术社区  · 15 年前

    谷歌Chrome和IE8(以及其他软件)的目标是通过将每个标签(网页)单独隔离在一个单独的过程中(我知道,过于简化),从而提供更高的可靠性和稳定性。

    这看起来比多线程要重得多,但是有一个进程崩溃的主要好处,而不是使整个应用程序崩溃。

    多进程体系结构似乎早已在服务器端应用程序(如Web服务器)中使用,但这些进程没有专用的GUI。有趣的是,它现在正被用于桌面应用程序的用户界面。

    我该如何在比如Windows窗体.NET应用程序中实现这一点呢?有可能吗?

    process.start()显然是首先要看的地方,但是新流程的GUI没有与宿主应用程序的GUI紧密集成。它是一个新的独立应用程序,而不是主机应用程序的子控件/窗口,就像Chrome/IE8那样。

    (对于感兴趣的人,斯科特·汉塞尔曼写了一篇很好的介绍。到 IE8 multi-process architecture here )

    [更新]

    更具体地说:

    单独的“子进程”如何直接呈现到“主进程”中的UI?这是真的发生了什么,还是正如评论中建议的那样,子进程是否使用IPC请求主进程为其呈现?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Andy    15 年前

    在.NET中使用多个进程的更好选择是使用多个AppDomain。这样做的好处是,只创建一个实际的Windows进程,但仍然可以增加多个区域的稳定性(即,一个AppDomain中的崩溃只会导致该进程关闭,而不是整个应用程序)。

    存在与此相关的成本,因为需要跨AppDomain边界序列化对象。不过,与多流程模型相比,开发它可能更容易。

        2
  •  5
  •   Tarnay Kálmán    14 年前

    谷歌Chrome正在使用 命名管道 用于进程间通信。

    这里有一些有趣的文档: http://dev.chromium.org/developers/design-documents

    有关带“.net”的命名管道的更多信息,只需谷歌搜索即可。

    @艾熙: 子进程正在运行 单独的Windows“桌面” 这意味着他们无法展示任何东西。(桌面是一件棘手的事情…) 所以我必须假设子进程呈现的所有内容都必须经过IPC。然后是主(?)进程显示它。

    我发现 单独的Windows“桌面” 这里的事情: http://dev.chromium.org/developers/design-documents/multi-process-architecture

        3
  •  1
  •   Community SqlRyan    7 年前

    顺便说一句。。。DUP

    见: Windows Forms application like Google Chrome with multiple processes (乔恩·斯基特的回答是:o)

    (我认为这也回答了“更具体”的部分)