進程和線程的定義和區別
1、進程定義
進程:是具有一定獨立功能的程序關於某個數據集合上的一次進行活動,是系統進行資源分配和調度的一個獨立單位。
2、線程定義
線程:是進程的一個實體,是cpu調度和分派的基本單位,他是比進程更小的能夠獨立運行的基本單位,線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源。一個線程可以創建和撤銷拎一個線程。
區別:
1、一個線程只能屬於一個進程,而一個進程可以擁有多個線程。
2、線程是進程工作的最新單位。
3、一個進程會分配一個地址空間,進程與進程之間不共享地址空間。即不共享內存。
4、同一個進行下的不同的多個線程,共享父進程的地址空間。
5、線程在執行過程中,需要協助同步。不同進程的線程間要利用消息通信的辦法實現同步。
6、線程作為調度和分配的基本單位,進程作為擁有資源的基本單位。
進程的優點:
1、每個進程互相獨立,不影響主程序的穩定性,子進程崩潰不影響其他進程。
2、通過增加CPU,就可以擴充性能。
3、可以盡量減少線程加鎖與解鎖的影響,極大的提高了性能。
進程的缺點:
1、邏輯控制復雜,需要和主程序交互。
2、多進程調度開銷大。
線程的優點:
1、程序邏輯和控制方式簡單。
2、所有線程可以直接共享內存和變量等。
3、線程方式消耗的總資源比進程方式少。
線程的缺點:
1、每個線程和主程序共用地址空間,最大內存地址受限。
2、線程之間的同步和加鎖不易控制。
3、一個線程的崩潰可能影響到整個程序的穩定性。
•進程(process): 狹義定義:進程就是一段程序的執行過程。 廣義定義:進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。他是操作系統動態執行的基本單元,在傳統的操作系統中,進程即是基本的分配單元,也是基本的執行單元。 1)進程是一個實體,每個進程都有自己的地址空間,一般情況下,包含文本區域、數據區域、堆棧 2)進程是執行中的程序,程序是一個沒有生命的實體,只有處理器賦予程序生命時,他才能成為一個活動的實體,我們稱之為進程 3)進程本身不會運行,是線程的容器。線程不能單獨執行,必須組成進程 4)一個程序至少有一個進程,一個進程至少有一個線程 5)對於操作系統來講,一個任務就是一個進程,比如打開一個瀏覽器就是啟動一個瀏覽器進程。打開一個記事本就是啟動一個記事本進程,打開2個記事本就是啟動2個記事本進程 6)有些進程還不止同時做一件事情。比如打開word,他可以同時進行打字、打印、拼音檢查等等,在一個進程內部,要同時干多件事情。 進程狀態: 1)就緒:獲取出CPU外的所有資源、只要處理器分配資源就可以馬上執行 2)運行:獲得處理器分配的資源,程序開始執行 3)阻塞:當程序條件不夠的時候,需要等待提交滿足的時候才能執行。 •線程: 1)一個進程中至少有一個線程,不然就沒有存在的意義
2)在一個進程內部,要同時干多件事情,就需要同時運行多個子任務,我們把進程內的這些子任務叫做線程
3)多線程就是為了同步完成多項任務(在單個程序中同時運行多個線程完成不同的任務和工作),不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率
4)一個簡單的比喻,多線程就像是火車上的每節車廂,而進程就是火車
5)線程是程序執行流的最小單元。一個標准的線程由當前的線程ID、當前指令指針、寄存器和堆棧組成
6)同一個進程中的多個線程之間可以並發執行
線程狀態:
1)就緒:指線程具備運行的所有條件,邏輯上可以運行,在等待處理機
2)運行:指線程占用處理機正在運行
3)阻塞:線程在等待一個事件,邏輯上不可執行
如果我們要同時執行多個任務怎么辦?
1)啟動多個進程,每個進程雖然只有一個線程,但是多個進程可以一塊執行多個任務
2)啟動一個進程,在一個進程內啟動多個線程,這樣多個線程也可以一塊執行多個任務
多任務:
1)一邊瀏覽網頁、一邊聽歌、一邊看電影;這就是多任務。
