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


88

谁能解释IIS在应用程序池,工作进程和应用程序域之间的区别?另外,他们如何一起工作?我已经阅读了几篇文章,但是仍然有些混乱。

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

Answers:


103

我试着用其他话对他们说。

在服务器中,您可以有许多同时运行的asp.net站点。每个站点都是一个应用程序域

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

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

当您将多个工作进程分配给一个池时,您将创建一个称为Web的花园,并且如果一台计算机是一台处理机,则您的站点就像是从多台计算机上运行。

应用程序域,以及池和进程

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

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

还有一张便条。听起来,当您执行更多工作进程时,您可能会拥有更流畅的异步页面加载。asp.net的会话处理程序存在一个小问题,该问题将整个过程锁定为页面加载-这是好的,并且不好,取决于您是否知道并处理它-或对其进行更改。

因此,让我们只讨论一个有很多工作流程的站点。在这里,您面临着需要与同步通用资源更改的问题Mutex。但是使用会话的页面/处理程序不是异步的,因为会话会锁定它们。这是很好的开始,因为您避免自己进行多点同步。

关于此主题的一些问题:
在共享同一会话时处理另一个Web应用程序时,Web应用程序被阻止,
对Web服务的jQuery Ajax调用似乎是同步的
ASP.NET Server不会异步处理页面
完全替换ASP.Net的会话

现在,此会话锁定不会影响其他站点。

在不同站点之间,工作量更大的过程可以帮助一个站点避免长时间运行的另一个站点。
同样,在不同站点之间,更多的池也可以提供帮助,因为每个池至少有一个工作进程,但是使用进程浏览器自己记住并查看,每个工作进程占用更多的计算机内存,以及一台具有16G内存的大服务器一台SQL Server不能有太多不同的工作过程-例如,在具有100个共享站点的服务器上,您不能有100个不同的池。


我正在弄清楚,与IIS 6及更高版本相比,它与IIS 5的处理方式不同。因此,与IIS 6相比,在IIS 5中您有一个工作进程和多个应用程序域,每个应用程序池都有一个工作进程(w3wp.exe)。在IIS 6.0中,inetinfo根据请求重定向到不同的工作进程。我在这里吗?下面是我的源dotnetslackers.com/articles/iis/...
拉维

@ user460103是iis5有一个工作进程(多个应用程序域只能有一个小的hack,但它们不能一起工作。)当您在一个站点上有多个工作进程时,则iis6可以将您重定向到另一个工作进程。
亚里斯(Aristos)2012

IIS是否为每个Web请求启动一个新进程?还是启动了新线程?
变数

@variable旋转一个新线程-该进程一直处于运行状态,或者它们以您在池中设置它们的方式回收……
Aristos

好吧,如果有多个进程,那么会话如何工作-我认为会话是
变量

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

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


7
  1. 是的,尽管并非每个应用程序都是一个网站。您可以将应用程序嵌套网站下。

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

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


从MSDN。

创建一个Web应用程序

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

应用程序池

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


因此,IIS进程具有多个应用程序域(应用程序池),并且每个应用程序池都可以有多个网站。那么,多个网站驻留在单个应用程序域中吗?如果一个网站出了问题怎么办,它会占用整个应用程序域以及其中的所有网站吗?
拉维

@ user460103如果使池崩溃,则是的,连接到该池的所有站点都会停止-然后重新启动。
亚里斯(Aristos)2012

1
2.不。如果配置了网络花园,则一个应用程序可能跨越多个工作进程。
Wiktor Zychla

@Wiktor-我没有排除这一点。但是,更新后的答案予以澄清。
奥德

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应用程序的请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.