- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我了解应用程序域形式:
安全隔离边界,版本控制,可靠性,和卸载托管代码,
但是进程也是如此
我对应用领域的概念还不是很清楚。而且我很难理解为什么在存在过程概念的情况下实现这个概念。
谢谢。
最佳答案
我无法判断您是在笼统地谈论还是具体地谈论 .NET 的 AppDomain
。
我将假设 .NET 的 AppDomain
以及为什么当您需要在单个进程中进行隔离时它会非常有用。
例如:
假设您正在处理一个具有某些工作人员类的库,您别无选择,只能使用这些工作人员并且不能修改代码。您的工作是构建一个 Windows 服务来管理上述工作人员并确保他们都保持正常运行并且需要并行工作。
很简单吧?嗯,你希望。事实证明,您的 worker 库容易引发异常,使用 static
配置,并且通常只是一个真正的 PITA。
您可以尝试在它们自己的进程中启动它们,但要监视它们,您需要实现命名管道或尝试仔分割析进程的 STDIN 和 STDOUT。
你还能做什么? AppDomain
实际上解决了这个问题。我可以为每个工作人员生成一个 AppDomain,给他们自己的配置,他们不能通过更改 static
属性来互相搞砸,因为他们是孤立的,而且最重要的是,如果图书馆爆炸了而且我没有发现异常,它不会打扰他们域中的工作人员。而在这一切期间,我仍然可以轻松地与那些 worker 交流。
遗憾的是,我以前不得不这样做
编辑:开始将其写为评论回复,但太大了
单个流程在许多情况下都可以很好地工作,但是,有时它们会变得很痛苦。我并不是说应该在另一个进程上使用 AppDomain。我认为您很少需要单独的进程或 AppDomain,但一旦您需要它,您肯定会知道。
在我上面给出的场景中,我看到进程的主要问题是进程有自己的缺点,这些缺点更容易通过 AppDomain 来缓解。
进程可能会变得异常、变得无响应、崩溃或随时被杀死。
如果您正在管理流程,则需要跟踪流程 ID 并监控其状态。 IPC 很棒,但是根据需要来回进行适当的通信确实需要时间。
举个例子,假设您的进程刚刚结束。你做什么工作?根据您选择监视的机制,可能是通信线程死亡,也可能是工作已完成但您仍将其显示为“正在处理”。你做什么工作?
现在当您有 20 个进程并且您的管理应用程序死机时会发生什么。你没有任何真实的信息,你只有 20 个“myprocess.exe”,也许现在必须开始解析它们开始时使用的命令行参数,以查看你实际拥有哪些工作人员。显然,使用 AppDomain 时,所有 20 个也会死亡,但您真的从这个过程中获得了什么吗?您仍然需要编写恢复能力的代码,但是,现在您还必须为您的流程编写所有恢复代码,而不是仅仅解雇工作人员。
与编程中的任何事物一样,有 1,000 种不同的方法可以实现相同的目标。由您决定您认为最合适的解决方案。
关于C# 应用程序域到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768034/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!