進程和線程區別及應用場景

1.定義
進程:具有一定功能的程序關於某個數據集合上的一次運行活動,進程是承擔系統資源分配的基本單位。
線程:進程的一個實體,是cpu調度的基本單位,它是比進程更小的能獨立運行的單位。線程基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(程序計數器,一組寄存器和棧)。

2.兩者之間的關係
一個線程只能屬於易一個進程,但一個進程中可以多個線程。相對於進程而言,線程是一個更加接近於執行體的概念,它可以與同進程中的其他線程共享數據,但擁有自己獨立的棧空間,有獨立的執行序列。

3.區別
進程和線程的主要差別在於它們是不同的操作系統資源管理方式:
地址空間:同一個進程的線程共享本進程的地址空間,而進程之間則是獨立的地址空間。
資源擁有:同一進程中的線程共享本進程的資源如內存、I/o、cpu等,但進程之間的資源是獨立的。
崩潰時的影響:一個進程崩潰後,不會對其他其他的進程產生影響,但是一個線程崩潰整個進程就會退出。所以多進程程序要比多線程程序更加的健壯。
進程線程的切換:進程切換時,消耗的資源大,效率低,而線程切換開銷要小很多。所以涉及到頻繁的切換時,使用線程要好於進程。同樣如果要求同時進行並且又要共享某些變量的併發操作,只能用線程不能用進程。
優缺點:
線程執行開銷小,但不利於資源的管理和保護;而進程正相反。同時,線程適合於在SMP(多cpu)機器上運行,而進程則可以跨機器遷移。

應用場景:
多線程佔相比於多進程佔用內存少、CPU利用率高,創建銷燬,切換都比較簡單,速度很快。多進程相比於多線程共享數據複雜,需要將進程間通信。但是同步簡單,多線程因爲數據共享簡單,導致同步複雜。多進程編程調試都比多線程簡單。進程之間互相不影響,一個線程掛掉將導致整個進程掛掉。多進程適合多核,多機分佈,多線程適合多核分佈。

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