多線程開發掃盲系列第一編:進程與進程間通信

 

1. 操作系統的進程與線程管理   

2. 進程的啓動和終止   

3. 進程通信   

 

1.進程與線程管理

進程(process)是一個具有獨立功能的程序在一個數據集合上的一次動態執行過程。這個定義太理論化了,用一句通俗的話取代它:進程可以簡單理解爲一個正在運行的程序。
程序與進程的區別可以用圖形像地表達出來。


    Window設計了兩種代碼運行環境,用戶模式(User Mode)和核心模式(kernel Mode),普通的應用程序運行於用戶模式中,而操作系統的關鍵代碼(比如負責分配與回收內存、創建和銷燬進程等功能的代碼)運行於核心模式下。 在windows中,”系統調用”主要指win32API中的特定函數,所以,windows應用程序通過調用win32API函數來實現從”用戶模式”到”核心模式”的轉換
   

    句柄與系統核心對像
    位於操作系統內核中,僅允許運行於”核心模式”下的代碼訪問的數據被稱爲”核心對像”,操作系統在運行時,會在系統核心不斷地創建和銷燬”核心對像”,爲了便於跟蹤和訪問這些對像,操作系統爲這些對像分配了標識,這是一個32位的整數,被稱爲”句柄”。許多win32 API函數通過句柄來定位所要訪問的系統核心對像。在.NET託管環境中,.NET應用程序對”普通對像”和”核心對像”不加區分,使用New關鍵字就可以創建任何一種類型的對像,而對像的銷燬工作郵CLR負責。
   

    Windows操作系統使用線程作爲CPU調度的基本單位,一個進程可以劃分多個線程,也可以只有一個線程。它擁有一個線程標識(ThreadID),一組CPU寄存器,兩個堆棧和一個專有的線程局部存儲區(Thread Local Storage,TLS)。屬於同一個進程的線程共享進程所擁有的資源。
進程是系統分配各種資源(比如內存)的單位,而線程則是操作系統分配CPU(即處理機調度)的基本單位。

 

2.進程的啓動與終止

    .NET應用程序控制進程的核心是Process類,Process類繼承自Component類,通常又稱爲Process組件。Process組件代表一個託管進程,底層封裝的是操作系統的本地進程。另一個重要的類是ProcessStartInfo類,這個類封裝了進程啓動時的各種控制參數。

如下繼承結構圖


使用Process.Start方法啓動進程
Process.Start(“IExplore.exe”)
Process.Start(“IExplore.exe”,”www.baidu.com”)
有時候我們希望向進程傳送一些控制信息,比如此進程打開一個網頁時最小化,可以這麼來做
ProcessStartInfo info = new ProcessStartInfo("IExplore.exe");
info.WindowStyle=ProcessWindowStyle.Minimized;  //自動最小化
info.Arguments="www.sina.cn";  //自動訪問新浪網
Process.Start(info);  //啓動進程   


通過調用CloseMainWindow方法發出的結束進程運行的請求不會強制應用程序立即退出,它相當於用戶直接點擊主窗口上的關閉按鈕。應用程序可以在退出前請求用戶確認,也可以拒絕退出。

Kill方法強制關閉一個進程,與CloseMainWindow方法不同,Kill方法實際上是請求操作系統直接結束進程,它不給要關閉的進程保存數據的機會,因此除非要保存的進程沒有任何數據需保存,否則不要採用Kill方法直接結束某個進程。

 

3.進程通信

進程通信的方式:共享內存,消息,命名管道,Socket通信等。

 

原文鏈接:http://www.cnblogs.com/75115926/p/3273116.html

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