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