一個進程通常定義為程序的一個實例。在Win32中, 進程占據4GB的地址空間。與它們在MS-DOS和16位Windows操作系統中不同, Win32進程是沒有活力的。這就是說,一個Win32進程并不執行什么指令,它只是占據著4GB的地址空間,此空間中有應用程序EXE文件的 代碼和數據。EXE需要的任意DLL也將它們的代碼和數據裝入到進程的地址空間。除了地址空間,進程還占有某些資源,比如文件、動態內存分配和線程。當進程終止時,在它生命期中創建的各種資源將被清除。
但是進程是沒有活力的,它只是一個靜態的概念。為了讓進程完成一些工作,進程必須至少占有一個線程,所以線程是描述進程內的執行,正是線程負責執行包含在進程的地址空間中的代碼。實際上,單個進程可以包含幾個線程, 它們可以同時執行進程的地址空間中的代碼。為了做到這一點,每個線程有自己的一組CPU寄存器和堆棧。
線程是進程內部的一個執行單元。系統創建好進程后,實際上就啟動執行了該進程的主執行線程,主執行線程以函數地址形式,比如說main或WinMain函數,將程序的啟動點提供給Windows系統。主執行線程終止了,進程也就隨之終止。
每一個進程至少有一個主執行線程,它無需由用戶去主動創建,是由系統自動創建的。用戶根據需要在應用程序中創建其它線程,多個線程并發地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統資源,所以線程間的通訊非常方便,多線程技術的應用也較為廣泛。
多線程可以實現并行處理,避免了某項任務長時間占用CPU時間。要說明的一點是,目前大多數的計算機都是單處理器(CPU)的,為了運行所有這些線程,操作系統為每個獨立線程安排一些CPU時間,操作系統以輪換方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運行。由此可見,如果兩個非常活躍的線程為了搶奪對CPU的控制權,在線程切換時會消耗很多的CPU資源,反而會降低系統的性能。這一點在多線程編程時應該注意。
現代操作系統大都提供了相應的機制,用來處理線程的生存期、同步,以及其他“和線程有關”的屬性,如優先級、線程專有存儲空間(thread-specific storage)等。多線程編程是一門語言的難點和重點
posted on 2011-08-14 12:37
風輕云淡 閱讀(421)
評論(0) 編輯 收藏 引用 所屬分類:
C++