asp.net – IIS应用程序池,工作进程,应用程序域

任何人都可以解释在IIS中,应用程序池,工作进程和应用程序域之间的区别?另外,他们如何一起工作?我读了几篇文章,但它仍然有点混乱。

>在IIS中创建的每个网站是否成为一个应用程序?
>每个应用程序是否与一个工作进程相关联?
>应用程序域进入了哪里?

最佳答案
我试着用别的话说他们。

在服务器中,你可以有许多asp.net网站一起运行。每个网站都是一个应用程序域。

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

现在每个池可以有一个或多个工作进程。每个工作进程是一个不同的程序,运行你的网站,有他们独立的静态变量,他们不同的开始停止调用等。不同的工作进程不是一起沟通,交换数据的唯一方法是从普通文件或公共数据库。如果你有多个工作进程,其中一个进行长时间的计算,那么另一个可以小心处理互联网电话和显示内容。

当您将多个工作进程分配到单个池时,您将创建所调用的Web花园,并且如果计算机是一台处理机,则您的站点将从多个计算机运行。

app domains, with pools and processes

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

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

还有一个注意。它的声音,当你做更多的工作进程,那么你可能有更平滑的异步页面加载。 asp.net的会话处理程序有一个小问题,它锁定了页面加载的整个过程 – 这是好的,不好依赖,如果你知道它并处理它 – 或更改它。

所以让我们谈谈一个网站只有很多工作进程。在这里,您面临的问题,您需要同步您的公共资源更改与Mutex。但是使用会话的页面/处理程序不是异步的,因为会话锁定了它们。这对于开始是好的,因为你避免让许多点的同步你自己。

关于这个主题的一些问题:
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

现在这个会话锁不会影响不同的网站。

在不同的网站中,更多的工作过程可以帮助不是一个网站阻止其他与长期运行的过程。
也在不同的网站之间,更多的池也可以帮助,因为每个池至少有一个工作过程,但记住和看到你的自我使用过程资源管理器,每个工作过程需要更多的内存您的计算机和一个大服务器与16G内存并且一个SQL服务器不能有太多不同的工作进程 – 例如在具有100个共享站点的服务器上,您不能有100个不同的池。

转载注明原文:asp.net – IIS应用程序池,工作进程,应用程序域 - 代码日志