線程 應用程序域 進程

進程是個管理單元,管理着應用程序的多個線程,其中有個默認的主線程,其他線程都是從其他線程中派生出來的。線程一旦被創建,主線程是無法干涉它的。線程的銷燬在.net中是通過拋出一個異常,來終止這個線程的。

在.net出現以前,一個進程下,只能運行一個應用程序,而在,net出現後,一個進程下,可以運行多個應用程序,這都是因爲應用程序域的出現。

以前使用進程邊界來隔離在同一臺計算機上運行的應用程序。每一個應用程序被加載到單獨的進程中,這樣就將該應用程序與在同一臺計算機上運行的其他應用程序相隔離。

隔離這些應用程序的原因在於內存地址是與進程相關的;在目標進程中,不能通過任何有意義的方式使用從一個進程傳遞到另一個進程的內存指針。此外,您不能在兩個進程間進行直接調用。您必須代之以使用代理,它提供一定程度的間接性。

應用程序域提供安全而通用的處理單元,公共語言運行庫可使用它來提供應用程序之間的隔離。您可以在具有同等隔離級別(存在於單獨的進程中)的單個進程中運行幾個應用程序域,而不會造成進程間調用或進程間切換等方面的額外開銷。在一個進程內運行多個應用程序的能力顯著增強了服務器的可伸縮性。

隔離應用程序對於應用程序安全也是十分重要的。例如,您可以在單個瀏覽器進程中運行幾個 Web 應用程序中的控件,同時使這些控件不能訪問彼此的數據和資源。

應用程序域所提供的隔離具有以下優點:

  • 在一個應用程序中出現的錯誤不會影響其他應用程序。因爲類型安全的代碼不會導致內存錯誤,所以使用應用程序域可以確保在一個域中運行的代碼不會影響進程中的其他應用程序。
  • 能夠在不停止整個進程的情況下停止單個應用程序。使用應用程序域使您可以卸載在單個應用程序中運行的代碼。

應用程序域形成了託管代碼的隔離、卸載和安全邊界。線程是公共語言運行庫用來執行代碼的操作系統構造。在運行時,所有託管代碼均加載到一個應用程序域中,由特定的操作系統線程來運行。

應用程序域和線程之間不具有一對一的相關性。在任意給定時間,在單個應用程序域中可以執行幾個線程,而且特定線程並不侷限在單個應用程序域內。也就是說,線程可以自由跨越應用程序域邊界;不爲每個應用程序域創建新線程。

在任意給定時間,每一線程都在一個應用程序域中執行。運行庫會跟蹤在哪些應用程序域中有哪些線程正在運行。 

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