IIS執行原理

服務器的監聽(IIS6.0+版本)

  1. 當請求到達服務器時,請求最終會到達TCPIP.SYS驅動程序,TCPIP.SYS將請求轉發給HTTP.SYS網絡驅動程序的請求隊列中(可以理解爲專門處理http請求的進程),當然在處理請求的過程中,HTTP.SYS進程會維護一個配置表用緩存請求的url和和應用程序池對應的關係。
  2. 當一個http請求被捕獲到,HTTP.SYS會讀取配置表,如果對應的應用程序沒有啓動,則HTTP.SYS會啓動IIS相對應的應用程序。具體運行機制可以理解成爲:

HTTP.SYS

HTTP.SYS是TCP之上的一個網絡驅動程序,因此,HTTP.SYS不再屬於IIS(這裏說的IIS都是IIS6.0+版本,下文如果不特殊指明,默認爲IIS6.0+版本),它已經從IIS中獨立了出來。 Http.Sys獨立有以下幾個優點:

  • 可靠性: HTTP.SYS運行在內核模式下,作爲操作系統的驅動程序運行。因此,HTTP.SYS不會受到用戶代碼的影響,它始終處於穩定運行狀態,對用戶的http請求進行監聽,並及時作出反應。
  • 高性能: 從用戶發送http請求到系統返回響應結果的這一過程都是HTTP.SYS在內核模式下完成的。不需要在內核模式和用戶模式下進行切換,這樣就極大地節省了系統資源,提高了請求的響應速度。

IIS處理

W3SVC

  1. W3SVC服務是一個獨立運行的程序,寄宿在svchost.exe進程中,負責用戶的參數監視和重新啓動應用池的工作。 當一個請求進入HTTP.SYS的隊列中,會通知W3SVC服務根據IIS中的配置去創建對應的應用進程,進行處理。

W3WP.exe

  1. 當HTTP.SYS把請求傳遞給IIS時候,W3SVC會啓動對應的應用程序池
  2. 當用戶請求的是靜態文件,如:HTML和圖片等,IIS會直接讀取文件內容,轉成二進制文件流,返回給HTTP.SYS。
  3. 當請求非靜態文件,如:.aspx。
  • 3-1. w3wp.exe會根據IIS中ISAPI擴展讀取對應的處理的Dll,用asp.net舉例:當用戶訪問的網站是asp.net平臺,則 類型是.cshtml和.aspx文件類型。根據配置w3wp.exe會加載aspnet_isapi.dll(簡稱是ISAPI).

IIS中應用程序的映射:

IIS中處理流程:

  • 3-2. 當ISAPI加載後,會啓動一個ASP.NET的工作進程,把信息的控制權交給Asp.Net來處理。此處請求的處理由IIS交給了asp.net的程序。 基於對上面的說明,可以把IIS的處理過程理解表示如下圖:

說到這裏,把IIS請求的流程簡單的做了說明,後面的工作就由Asp.Net去完成了。

.Net程序的運行過程

說到Asp.Net的運行,不得不先說下.Net的運行機制(算是爲後面的文章做一個鋪墊)。 在vs中寫了一段C#代碼(或者其它.net平臺的語言,此處簡單的用C#來說明) ,編譯器會把代碼轉譯成IL的中間語言程序。當程序運行時,系統調用jit編譯器,把中間語言編譯成對應的cpu指令,等待cpu的最終調用。具體過程如下:

託管和非託管

  • 定義 託管的概念是在.net框架誕生後出現的。用比較通俗的話解釋就是運行在.net框架下,並受.net框架管理的應 用或其他組件稱爲託管的,反之爲非託管的。
  • 區別 1、託管代碼是一種中間語言,運行在CLR上;非託管代碼被編譯爲機器碼,運行在機器上。 2、託管代碼獨立於平臺和語言,能更好的實現不同語言平臺之間的兼容;非託管代碼依賴於平臺和語言。 3、託管代碼可享受CLR提供的服務(如安全檢測、垃圾回收等),不需要自己完成這些操作;非託管代碼需要自己提供安全檢測、垃圾回收等操作。
  • 性能 對於這個問題,首先澄清.net中的JIT是不同Java中的JVM的(JVM是一個Interpreter,在運行時讀取IL彙編代碼,然後模擬成x86代碼),在.Net中使用的是一種更高級的技術,在程序首次加載的時候,JIT是把代碼編譯成本地指令(這也就是爲什麼.Net程序首次運行很慢的原因,但你的程序不可能只跑一次,尤其是在服務器上面的程序!),.NET程序經JIT轉換後與非託管程序運行一樣了,直接由CPU執行。 但對於JIT來說,恰恰由於是即時編譯,對當前的環境認識的比非託管更爲深刻(包括當前的CPU最新的指令),在編譯時可以進行優化。而非託管代碼,在編譯的時候要保證兼容性,所以只能使用最通用的cpu指令(公共的CPU指令),所以我個人認爲,.Net在執行的效率上更具有優勢。 非託管編譯運行過程

託管代碼編譯運行過程

(本文完)

作者:老付 如果覺得對您有幫助,可以下方的訂閱,或者選擇右側捐贈作者,如果有問題,請在捐贈後諮詢,謝謝合作 如有任何知識產權、版權問題或理論錯誤,還請指正。 自由轉載-非商用-非衍生-保持署名,請遵循:創意共享3.0許可證 交流請加羣113249828:點擊加羣 或發我郵件 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章