有人可以解释一下IIS中应用程序池、工作进程和应用程序域之间的区别吗?它们是如何协同工作的?我已经阅读了几篇文章,但还是有些困惑。
- 在IIS中创建的每个网站都成为一个应用程序吗?
- 每个应用程序是否关联一个工作进程?
- 应用程序域在这里起什么作用?
我试着用其他词语来表达它们。
在服务器上,您可以拥有许多运行在一起的asp.net站点。每个站点都是一个应用程序域。
您必须为每个站点分配一个应用程序池。许多应用程序域(站点)可以共享同一个应用程序池,因为它们共享相同的进程和帐户 - 并且它们具有池的相同设置。如果此池重新启动,则该池下的所有站点都将重新启动。
现在,每个池可以有一个或多个工作进程。每个工作进程都是运行您的站点的不同程序,具有它们自己的静态变量、不同的启动停止调用等。不同的工作进程之间不会相互通信,交换数据的唯一方法是使用公共文件或公共数据库。如果您有多个工作进程,并且其中一个进行长时间计算,那么另一个可以处理Internet呼叫并显示内容。
当您将多个工作进程分配给单个池时,您就创建了所谓的Web Garden,如果计算机是一个处理机,则您的站点就像是从多台计算机运行。
每个工作进程可以有多个线程。lock
来同步它们,一切都更简单。lock
来处理静态变量,静态变量在您的站点的许多运行中并没有不同,并且如果您有一些常见资源(例如在磁盘上创建缩略图),则需要使用Mutex
来同步您的工作进程。对 ASP.NET 开发人员的意义:为了使您的网站具有可扩展性,请勿使用内存中会话并且请勿使用静态类变量锁进行同步。
是的,但并非每个应用程序都是网站。您可以有一个嵌套在网站下面的应用程序。
是的,每个应用程序都必须有一个工作进程(应用程序池),但一个应用程序池可以为多个应用程序提供服务。单个Web应用程序可以分布式(Web园/农场),这意味着它将在多个进程中运行。
每个进程将在自己的应用程序域中运行(每个应用程序池都是单独的应用程序域)。
来自MSDN。
一个应用程序是指位于Web站点根目录下的内容组或位于单独文件夹中的内容组。
应用程序池定义了一组具有共同设置的一个或多个工作进程,为分配给该应用程序池的一个或多个应用程序提供服务请求。因为应用程序池允许一组Web应用程序共享一个或多个类似配置的工作进程,所以它们为将一组Web应用程序与服务器计算机上的其他Web应用程序隔离提供了一种方便的方法。进程边界分隔每个工作进程;因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的Web站点或应用程序。应用程序池显著增加了Web基础架构的可靠性和可管理性。
从源链接中得知:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx
应用程序是IIS术语,但它是ASP.NET利用的一个术语。基本上,它创建了一个沙箱,或一组边界,将不同站点或站点的部分与其他站点或站点的部分分开。
AppDomain是.NET术语。(在IIS7中,AppDomains在IIS中扮演更大的角色,但在很大程度上它是一个ASP.NET术语)
工作进程用于处理Web应用程序的请求。