進程和線程的有什麼異同詳解

進程

  • 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。它的執行需要系統分配資源創建實體之後,才能進行。
  • 操作系統管理核心中的重要對象,從0進程(os不可見),到1號(init)。。。,到N號,人機交互shell。。。
  • 是最小資源分配單位,可看成是隻有一個線程的進程。

線程

  • 在Linux環境下的輕量級進程,LWP,light weight progress
  • 在進程內部的並行執行流,無獨立資源(使用進程資源)下運行
  • 是最小的執行單位,調度的基本單位。

相同

  • 都是實現多任務併發的技術手段
  • 都可以獨立調度,父子進/線程調度時平等競爭
  • 2.4版內核以前,二者實現方式相同,2.6版以後單獨實現線程。

複製對方的地址空間,那麼就產生一個進程,如果共享對方的地址空間,就產生一個線程。Linux內核是不區分進程和線程的,只有在用戶層面上進行區分。所以,線程所有操作函數pthread_*是庫函數,而非系統調用,編譯和鏈接時需要加-pthread選項

差異

  • 進程是資源分配的基本單位,線程是調度的基本單位。
  • 每個進程至少包含一個主線程(main函數)
  • 進程之間完全獨立,線程只能依附於進程,線程也有PCB,但沒有獨立的地址空間(共享)

進程與線程特性

  • 線程創建和切換時的系統開銷比進程小,效率更高
  • 一個進程內部的線程間信息共享和通信比進程簡單高效
  • 線程除了能夠使用進程間通信(IPC)的所有方式外,海鷗互斥量、自旋鎖、條件變量、讀寫鎖、線程信號與全局變量,方式更多,更靈活高效。
  • 線程ID數量更多,進程退出後,分配和申請的相關資源(如打開的文件描述符等)有操作系統回收,子線程退出後,資源仍在進程空間中,需要人工回收
  • 進程之間“輩分”分級嚴格,線程之人一個主線程(main函數)
  • 父進程退出後,子進程運行不受影響,主線程(即進程)退出,所有子線程全部消亡。

線程的優缺點

  • 優點:1)提高程序併發性 2)開銷小 3)數據通信、共享數據方便
  • 缺點:1)庫函數實現,穩定性不如進程 2)編寫、測試、測驗難度相對更大,gdb不支持 3)對信號支持不好

線程的優點相對突出,缺點均不是硬傷。Linux下由於實現方式使得進程、線程之間的差別不是很大

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