首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 應用程式多進程模型架構解析

     編輯:關於ASP.NET

ASP.NET 執行於多進程、多執行緒環境,理解其架構對正確處理靜態變數、Session 狀態、跨進程物件至關重要。

架構圖解

關鍵角色

元件說明
w3wp.exe (Worker Process)IIS 工作進程,裝載 ASP.NET 執行階段。每個應用程式集區對應一個或多個 w3wp。
AppDomain.NET 邊界,隔離靜態變數、型別載入、安全性。一個 w3wp 可含多個 AppDomain。
HttpRuntime每個 AppDomain 一個,管理請求佇列、快取、配置讀取。
ThreadPoolCLR 執行緒池,ASP.NET 借用執行緒處理請求,完成後歸還。

開發者必知的三大陷阱

1. 靜態變數不跨進程/跨 AppDomain

public static int Counter = 0; // 每個 w3wp/AppDomain 獨立一份!

解決:用資料庫、Redis、AppFabric Cache 等外部分散式儲存。

2. Session 狀態模式決定資料邊界

  • InProc:進程內,效能最好但不支援 Web Farm、回收失效。
  • StateServer:獨立進程,跨 w3wp 共享,需序列化。
  • SQLServer:資料庫儲存,最穩健支援叢集。
  • Custom:Redis、MongoDB 等。

放入 Session 的物件在 StateServer/SQLServer 模式下**必須可序列化**(標記 [Serializable])。

3. Application/Lock 僅限單一 AppDomain

Application.Lock();
Application["Key"] = value; // 不會同步到其他 w3wp/AppDomain
Application.UnLock();

跨進程共享資料請改用分散式快取或資料庫。

最佳實踐

  1. 預設假設多進程、多執行緒、無共享記憶體。
  2. 靜態資料唯讀(配置、常數)才安全;可寫資料外移。
  3. Session 模式在架構設計階段確定,並測試序列化。
  4. 鎖用 lock 保護執行緒安全,跨進程用分散式鎖。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved