在IIS6中,每一個網站都有對應的應用程序池,在應用程序池有運行着網站的Application,在默認情況下,所有的網站的應用程序都會分配到默認的應用程序池當中,

當然,我們可以新建一個應用程序池,然后更改網站所在的應用程序池。
添加一個應用程序池:

在網站的屬性的主目錄選項卡下修改網站所在的應用程序池:

查看結果:

因為此時默認的情況下,所有的網站都在同一個應用程序池中,所以它們都會共享同一個w3wp進程,因為在默認的應用程序池中默認設置的Web園的最大進程數為1,如圖所示。

此時我們分別訪問默認應用程序池中的三個網站,可以看到進程管理器中只有一個w3wp進程在運行,這就驗證了我們上面的提到的結論。

我們也可以使用命令行工具來查看運行的工作進程有哪些:

接着我們來測試一下Web園的使用
首先我們將默認應用程序池的Web園中最大的工作進程數設為5:

然后,我們對這個應用程序池中的3個網站中進行10次訪問,最后我們再次查看工作進程w3wp的數量:

從上面的結果可以看到,修改了Web園之后,對應用程序池中的網站進行訪問,最多會生成5個w3wp進程,就是我們在上面設置的值,此時,這5個w3wp進程就可以將用戶的請求同時進行處。
注意:這里的5個w3wp進程之間是隔離的,所以它們之間的數據無法進行共享,例如Session,所以如果一個用戶登錄之后在Session中記錄了他的登錄信息,然后再后面的某次請求中他的請求不再是由原來的w3wp工作進程來處理就會造成用戶掉線的狀況。
接下來我們再次驗證一下上述5個w3wp是否真的是屬於默認的那個應用程序池的

因為,運行一段時間后,一個w3wp可能會占用很多的內存,所以此時,我們需要對工作進程進行回收,可以應用程序池的屬性中對回收的時間進行設置:

當到達回收時間,或者我們手動點擊了回收工作進程之后,IIS會重新創建相同數量的工作進程,讓新的工作進程來替代舊的工作進程來處理請求,然后結束原來舊的工作進程。
例如,我們當前這個默認的應用程序池中有5個w3wp進程在同時運行,我們手動進行回收,此時,IIS會創建5個新的w3wp進程來處理請求,然后結束原來的5個進程,執行的過程可以看下面的圖:

以上是在IIS6中的情況,下面我們來看一下IIS7中的w3wp工作進程:
在IIS7中,我們每次新建一個網站,默認的都會創建一個新的應用程序池,然后應用程序池中會包含我們的應用程序

在應用程序池中右鍵查看它的高級設置可以看到IIS7中的一個應用程序池的最大工作進程數也是1,所以,在一般情況下,我們訪問IIS7上的一個網站,只會產生一個w3wp工作進程,不管請求數時多少,即有n網站就最多只會有n個w3wp進程。

當我們,修改最大工作進程數為3時,在多次訪問這個網站時可以發現,結果與IIS6中相同,最多只會產生3個相應的w3wp工作進程。

從上面可以看到產生的3個工作進程都是屬於t3這個網站的,在IIS7中同樣提供了命令行工具操作IIS,這個工具在IIS7中名稱是
appcmd.exe,它在IIS7的安裝目錄下,一般就在以下的位置:

使用appcmd監測w3wp的回收過程,可以得到與IIS6中相同的結果:

如果在運行命令的時候發生一下的錯誤可能是因為權限不足的原因,只要右鍵以管理員的身份運行cmd后在執行命令即可。
