進程和線程的定義和區別
1、進程定義
進程:是具有一定獨立功能的程序關於某個數據集合上的一次進行活動,是系統進行資源分配和調度的一個獨立單位。
2、線程定義
線程:是進程的一個實體,是cpu調度和分派的基本單位,他是比進程更小的能夠獨立運行的基本單位,線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源。一個線程可以創建和撤銷拎一個線程。
區別:
1、一個線程只能屬於一個進程,而一個進程可以擁有多個線程。
2、線程是進程工作的最新單位。
3、一個進程會分配一個地址空間,進程與進程之間不共享地址空間。即不共享內存。
4、同一個進行下的不同的多個線程,共享父進程的地址空間。
5、線程在執行過程中,需要協助同步。不同進程的線程間要利用消息通信的辦法實現同步。
6、線程作為調度和分配的基本單位,進程作為擁有資源的基本單位。
進程的優點:
1、每個進程互相獨立,不影響主程序的穩定性,子進程崩潰不影響其他進程。
2、通過增加CPU,就可以擴充性能。
3、可以盡量減少線程加鎖與解鎖的影響,極大的提高了性能。
進程的缺點:
1、邏輯控制復雜,需要和主程序交互。
2、多進程調度開銷大。
線程的優點:
1、程序邏輯和控制方式簡單。
2、所有線程可以直接共享內存和變量等。
3、線程方式消耗的總資源比進程方式少。
線程的缺點:
1、每個線程和主程序共用地址空間,最大內存地址受限。
2、線程之間的同步和加鎖不易控制。
3、一個線程的崩潰可能影響到整個程序的穩定性。