asp.net - IIS 应用程序池、工作进程、应用程序域

标签 asp.net iis

任何人都可以解释 IIS 中应用程序池、工作进程和应用程序域之间的差异吗?另外,他们如何协同工作?我读过几篇文章,但仍然有点令人困惑。

  1. 在 IIS 中创建的每个网站都会成为一个应用程序吗?
  2. 每个应用程序是否与一个工作进程相关联?
  3. 应用域在哪里发挥作用?

最佳答案

我尝试用其他词来表达它们。

在一台服务器中,您可以有许多一起运行的 ASP.NET 站点。每个网站都是一个应用域

您必须为每个应用程序分配一个应用程序池。许多应用程序域(站点)可以具有相同的应用程序池,并且因为它们具有相同的应用程序池,所以它们在相同的进程和相同的帐户下运行 - 并且它们具有相同的池设置。如果此池重新启动,则该池下的所有站点都会重新启动。

现在每个池都可以有一个或多个工作进程。每个工作进程都是运行您的站点的不同程序,有自己的静态变量,不同的启动停止调用等。不同的工作进程不会一起通信,交换数据的唯一方法是来自公共(public)文件或公共(public)数据库。如果您有多个工作进程,并且其中一个进程进行长时间计算,那么另一个进程可以负责处理互联网调用并显示内容。

当您将许多工作进程分配给一个池时,您就创建了所谓的网络花园,并且如果一台计算机是一台处理机,您的网站就像是从多台计算机上运行。

app domains, with pools and processes

每个工作进程可以有多个线程。

更多工作进程对您有何影响:
当您有一个工作进程时,一切都会变得更加简单,在您的应用程序中,所有静态变量都是相同的,并且您使用 lock同步它们。
当您分配多个工作进程时,您仍然继续对静态变量使用,静态变量在站点的多次运行中并没有什么不同,并且如果您有一些公共(public)资源(例如在磁盘上创建缩略图),那么您需要将工作进程与 Mutex 同步.

还有一点要注意。听起来,当您创建更多工作进程时,您可能会获得更流畅的异步页面加载。 asp.net 的 session 处理程序有一个小问题,即锁定页面加载的整个过程 - 这是好是坏取决于您是否了解它并处理它 - 或者更改它。

所以我们来讨论一个只有多个工作进程的站点。在这里,您面临的问题是需要使用 Mutex 同步公共(public)资源更改。但是使用 session 的页面/处理程序它们不是异步的,因为 session 锁定了它们。这对于开始是有好处的,因为您可以避免自己进行许多点的同步。

有关此主题的一些问题:
Web app blocked while processing another web app on sharing same session
jQuery Ajax calls to web service seem to be synchronous
ASP.NET Server does not process pages asynchronously
Replacing ASP.Net's session entirely

现在这个 session 锁定不会影响不同的站点。

在不同的站点之间,更多的工作进程可以帮助一个站点不会因为长时间运行的进程而阻塞另一个站点。
另外,在不同的站点之间,更多的池也有帮助,因为每个池至少有一个工作进程,但是请记住并使用进程资源管理器自己查看,每个工作进程占用您计算机的更多内存,并且一台具有 16G 内存的大型服务器并且一台 SQL 服务器不能有太多不同的工作进程 - 例如,在具有 100 个共享站点的服务器上,您不能有 100 个不同的池。

关于asp.net - IIS 应用程序池、工作进程、应用程序域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105345/

相关文章:

asp.net - 无法加载文件或程序集或其依赖项之一。尝试加载格式不正确的程序

amazon-web-services - AWS EBS 上的 ASP.Net Core - 写入权限和 .ebextensions

javascript - Kendo UI (ASP.NET/Javascript) - 字符串中的换行符或换行符未显示在工具提示中

c# - 链接到照片 ASP.NET

asp.net - MVC 6 asp-validation-summary 省略属性名称以验证隐藏输入

mysql - 将 XAMPP 项目移动到真实服务器

iis - Asp.Net Core Windows 身份验证在 IIS 中不起作用

python - 如何使用不同的 Python 运行时将 Django/WSGI 部署为 azure web 应用程序?

javascript - 记录 IP、时间和用户代理

javascript - 启动 .bat 或 .exe 客户端