IIS应用程序池,工作进程,应用程序域

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

  1. 在IIS中创build的每个网站是否成为应用程序?
  2. 每个应用程序与一个工作进程相关联吗?
  3. 应用程序域在什么地方出现?

我试着用其他的话说出来。

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

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

现在每个池可以有一个或多个工作进程 。 每个工作进程是一个运行你的站点的不同的程序,它们独立的静态variables,不同的启动停止调用等。不同的工作进程不能一起通信,交换数据的唯一方式是来自公用文件或公用数据库。 如果你有多个工作进程,其中一个进行长时间计算,另一个可以处理互联网调用并显示内容。

当您将许多工作进程分配到单个池中时,您将创build所谓的Web园,并且如果计算机是一台处理机,则您的站点就像从多台计算机运行一样。

应用程序域,包含池和进程

每个工作进程可以有很multithreading。

工作stream程越多,对您的影响如何:
当你有一个工作进程时,一切都变得更加简单,在你的应用程序中,所有的静态variables都是一样的,你可以使用lock来同步它们。
当你分配多个工作进程时,你仍然继续使用lock来获取静态variables,静态variables在你的站点的许多运行中没有不同,如果你有一些共同的资源(例如在磁盘上创build一个缩略图),那么你需要同步你的工作进程与Mutex

再一个注意。 它的声音,当你做更多的工作进程,那么你可能有更顺利的asynchronous页面加载。 asp.net的会话处理程序存在一个小问题,那就是locking页面加载的整个过程 – 这很好,不好取决于你是否知道并处理它,或者改变它。

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

关于这个话题的一些问题:
在共享相同会话的同时处理另一个networking应用时,Web应用被阻止
jQuery Ajax调用Web服务似乎是同步的
ASP.NET服务器不会asynchronous处理页面
完全取代ASP.Net的会话

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

在不同的网站中,更多的工作过程可以帮助不是一个站点阻塞另一个长时间运行的过程。
另外在不同的网站中,更多的池也可以提供帮助,因为每个池至less有一个工作过程,但是使用进程资源pipe理器记住你自己,每个工作进程占用你的计算机的更多内存,而一个带有16G内存的大服务器和一个SQL服务器不能有太多不同的工作过程 – 例如在一个有100个共享站点的服务器上,你不能有100个不同的池。

  • 一个IIS服务器可能有多个应用程序池。
  • 一个Web应用程序绑定到一个应用程序池。
  • 一个应用程序池可能有多个工作进程(启用Web Garden时)。
  • 一个工作进程可以有多个应用程序域。 一个应用程序域只能存在于一个工作进程中。
  • 一个应用程序域可能有多个线程。 一个线程可以在不同的时间被不同的应用程序域共享。

对ASP.NET开发人员的意义:为了使您的网站具有可伸缩性,请不要使用in-proc会话,也不要使用静态类variableslocking进行同步。

  1. 是的,虽然不是每个应用程序都是一个网站。 你可以有一个嵌套网站的应用程序。

  2. 是的,每个应用程序必须有一个工作进程(应用程序池),尽pipe一个应用程序池可以服务于多个应用程序。 一个Web应用程序可以分发(Web花园/农场),这意味着它将运行在多个进程中。

  3. 每个进程都将在其自己的应用程序域中运行(每个应用程序池都是独立的应用程序域)。


来自MSDN。

创build一个Web应用程序 :

应用程序是网站根级别的内容分组,或者网站根目录下单独文件夹中的一组内容。

应用程序池 :

应用程序池定义一组一个或多个工作进程,并使用公共设置进行configuration,以将请求提供给分配给该应用程序池的一个或多个应用程序。 因为应用程序池允许一组Web应用程序共享一个或多个类似configuration的工作进程,所以它们提供了一种方便的方法来将一组Web应用程序与服务器计算机上的其他Web应用程序隔离。 stream程边界将每个工作stream程分开; 因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的网站或应用程序。 应用程序池显着提高了Web基础架构的可靠性和可pipe理性。

从源代码链接:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

应用程序是一个IIS术语,但它是ASP.NET使用的一个。 本质上,它创build了一个沙箱或一组边界,将不同的网站或部分网站与其他网站分开。

一个AppDomain是一个.NET术语。 (在IIS7中,AppDomain在IIS中发挥更大的作用,但大部分是ASP.NET术语)

工作进程用于处理Web应用程序的请求。