任何人都可以解释IIS中应用程序池,工作进程和应用程序域之间的差异吗?另外,他们如何一起工作?我读了几篇文章,但它仍然有点令人困惑。
答案 0 :(得分:94)
我试着用其他的话说出来。
在服务器中,您可以拥有许多一起运行的asp.net站点。每个网站都是应用域。
您必须为每个人分配一个应用程序池。许多应用程序域(站点)可以具有相同的应用程序池,并且因为它们具有相同的应用程序池,它们在相同的进程下运行,并且在同一帐户下运行 - 并且它们具有相同的池设置。如果此池重新启动,则该池下的所有站点都将重新启动。
现在每个池可以有一个或多个工作进程。每个工作进程都是一个不同的程序,它运行您的站点,具有单独的静态变量,它们不同的启动停止调用等。不同的工作进程不能一起通信,并且交换数据的唯一方法是来自公共文件或公共数据库。如果您有多个工作流程并且其中一个进行长时间计算,那么另一个可以处理互联网呼叫并显示内容。
当您将多个工作进程分配到单个池时,您可以创建被叫 Web园,如果计算机是一台处理机,则您的站点就像是从多台计算机上运行。
每个工作进程都可以有很多线程。
更多工人流程如何影响您:
如果您有一个工作流程,一切都会变得更简单,在您的应用程序中,所有静态变量都是相同的,您可以使用lock
来同步它们。
当您分配多个工作进程时,您仍然继续使用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个不同的池。
答案 1 :(得分:15)
ASP.NET开发人员的意思:为了使您的网站可扩展,请不要使用进程内会话,也不要使用静态类变量锁进行同步。
答案 2 :(得分:7)
是的,虽然不是每个应用程序都是一个网站。您可以拥有一个嵌套在网站下的应用程序。
是的,每个应用程序都必须有一个工作进程(应用程序池),尽管一个应用程序池可以为多个应用程序提供服务。可以分发单个Web应用程序(Web园/场),这意味着它将在多个进程中运行。
每个进程都将在自己的应用程序域中运行(每个应用程序池都是一个单独的应用程序域)。
来自MSDN。
应用程序是网站根级别的内容分组或网站根目录下单独文件夹中的内容分组。
应用程序池定义一组一个或多个工作进程,这些进程配置有通用设置,这些设置为分配给该应用程序池的一个或多个应用程序提供请求。由于应用程序池允许一组Web应用程序共享一个或多个类似配置的工作进程,因此它们提供了一种将一组Web应用程序与服务器计算机上的其他Web应用程序隔离的便捷方法。流程边界将每个工作流程分开;因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的Web站点或应用程序。应用程序池显着提高了Web基础结构的可靠性和可管理性。
答案 3 :(得分:3)
从源链接:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx
应用程序是一个IIS术语,但它是ASP.NET使用的术语。 基本上它创建了一个沙箱,或一组边界来分开 不同的网站或网站的部分内容。
AppDomain是一个.NET术语。 (在IIS7中,AppDomains扮演着更重要的角色 在IIS中,但大多数情况下它是一个ASP.NET术语)
工作进程用于处理Web应用程序的请求。