幾乎所有的作業系統都支援同時運作多個任務,一個任務通常就是一個程式,每個運作中的程式就是一個程序。
當一個程式運作時,内部可能包含了多個順序執行流,每個順序執行流就是一個線程。
1、程序
程序是處于運作中的程式,具有一定的獨立能力,是系統進行資源配置設定和排程的一個獨立機關。
程序的特點:
- 獨立性
- 獨立存在的實體,擁有自己獨立的資源,擁有自己的私有位址;
- 在沒有經過程序本身允許的情況下,一個使用者程序不能通路其它程序位址空間。
- 動态性
- 程式隻是一個靜态的指令集合,而程序是一個正在系統中活動的指令集合;
- 程序在程式中加入了時間概念,具有自己的生命周期和各種不同的狀态。
- 并發性
- 多個程序可以在單個處理器上并發執行,不會互相影響。
2、線程
線程是程序的執行單元,也稱為輕量級程序。
就像程序在作業系統中的地位一樣,線程在程式中是獨立、并發執行流,當程序被初始化後,主線程就被建立。
線程的特點:
- 線程是程序的組成部分,一個線程必須有一個父程序,一個程序可以擁有多個線程;
- 一個程式運作後至少有一個程序,一個程序至少包含一個線程;
- 線程可以擁有自己的堆、棧、局部變量,但不能擁有系統資源。
- 多個線程共享父程序的全部資源,互相之間協作共同完成程序所要完成的任務;
3、多線程
多線程的運作方式:
- 線程是獨立運作的,它并不知道程序中是否還有其它線程存在;
- 線程的執行是搶占式的,目前運作的線程在任何時候都可以被扶起,以便其它線程運作;
- 一個線程可以建立和撤銷另一個線程,同一個程序中的多個線程可并發執行;
- 多線程擴充了多程序,使同一個程序可以同時并發處理多個任務。
多線程的優點:
- 程序之間不能共享記憶體,但線程之間共享記憶體很容易;
- 系統建立程序需要重新配置設定系統資源、記憶體空間,但建立線程則很簡單,是以用多線程來實作多任務并發比多程序效率高;