我不知道您是在谈论一般性还是专门谈论 .NET 的 AppDomain。
我将假设 .NET 的 AppDomain 以及为什么当您需要在单个进程中进行隔离时它会非常有用。
例如:
假设您正在处理具有某些工作人员类的库,您别无选择,只能使用这些工作人员并且无法修改代码。您的工作是构建一个 Windows Service 来管理上述工作人员并确保他们都保持正常运行并需要并行工作。
够简单吧?嗯,你希望。事实证明,您的工作库容易抛出异常,使用 static 配置,通常只是一个真正的 PITA。
您可以尝试在它们自己的进程中启动它们,但要监视它们,您需要实现命名管道或尝试仔细解析进程的 STDIN 和 STDOUT。
你还能做什么?好吧AppDomain 实际上解决了这个问题。我可以为每个工作人员生成一个 AppDomain,给他们自己的配置,他们不能通过更改 static 属性来搞砸彼此,因为它们是隔离的,最重要的是,如果库爆炸而我没能抓住例外情况是,它不会打扰他们所在领域的工作人员。在这一切过程中,我仍然可以轻松地与那些工人交流。
很遗憾,我之前不得不这样做
编辑:开始将其写为评论回复,但太大了
单个流程在许多情况下都可以很好地工作,但是,有时它们会变得很痛苦。我并不是说应该在另一个进程上使用 AppDomain。我认为你需要一个单独的进程或 AppDomain 并不常见,但一旦你需要它,你肯定会知道。
我在上面给出的场景中看到的进程的主要问题是,进程有自己的缺陷,使用 AppDomain 更容易缓解这些缺陷。
一个进程可以在任何时候变得流氓、变得无响应、崩溃或被杀死。
如果您要管理进程,则需要跟踪进程 ID 并监控它的状态。 IPC 很棒,但需要时间来根据需要来回进行适当的通信。
例如,假设您的进程刚刚终止。你做什么工作?根据您选择监视的机制,可能通信线程已终止,可能工作已完成,您仍将其显示为“正在处理”。你做什么工作?
现在,当您有 20 个进程并且您的管理应用停止运行时会发生什么。您没有任何真实信息,您只有 20 个“myprocess.exe”,现在可能必须开始解析它们开始使用的命令行参数,以查看您实际拥有哪些工作人员。显然,如果有一个 AppDomain,所有 20 人也会死掉,但你真的从这个过程中获得了什么吗?您仍然需要编写恢复能力,但是,现在您还必须为您的流程编写所有恢复代码,而不是仅仅解雇工人。
与编程中的任何事情一样,有 1000 种不同的方法可以实现相同的目标。由您决定您认为最合适的解决方案。