進程和線程的引入和區別總結

爲什麼引入進程和線程

在早期的計算機系統中單道批處理系統的程序是順序執行,在內存中僅裝入一道用戶程序,獨佔系統的所有資源,只有在一個系統完成之後才允許裝入另一個系統,這種方式浪費資源,系統運行效率低。

多道批處理系統:同時在內存中裝入多個系統,讓他們同時共享系統資源,併發執行,所以引入了進程的概念。

在80年代中期之前,進程一直是能擁有資源和獨立調度的基本單位,後來人們提出了比進程更小的基本單位——線程,想提高程序併發執行的程度。

進程在併發執行時所需付出的時空開銷:

  • 創建進程:系統創建進程時,必須給其分配其必須的所有資源,如內存空間、I/O設備、以及相應的PCB。
  • 撤銷進程:撤銷進程時必須對其所佔的所有資源進行回收,再撤銷PCB。
  • 進程切換:對進程上下文切換時,需要先保留當前進程的CPU環境,設置新的選中的進程的CPU環境,花費不少處理機時間。

所以提出了線程:輕量級進程的概念。線程是調度和分配的基本單位,因爲其擁有資源較少,當縣城切換時,僅需保存和設置少量寄存器內容,切換代價遠小於進程。

進程和線程的區別

指標 進程 線程
定義 進程的兩個屬性:1.進程是可擁有資源的基本單位 2.進程同時是可獨立調度和分配的基本單位 線程是調度和分派的基本單位
關係 因爲每個進程都有自己的進程地址空間,所以每個進程之間都是獨立的,進程之間的關係可以是父子關係 因爲一個進程可以創建多個線程,多個線程除了有自己的一點資源外,都共享進程地址空間中的資源,所以線程之間是平等的,一個進程中只有一個主線程
擁有資源 進程PCB 線程可以擁有的資源:線程ID、一組寄存器、棧、errno、信號屏蔽字、調度優先級
終止或崩潰時 進程終止時,其他進程不會受到影響,因爲每個進程之間是獨立的 一個線程崩潰時,其他線程會受到影響,因爲一個線程如果崩潰,很可能會影響進程地址空間中的數據,這樣其它線程也會受影響
切換 進程切換消耗大 線程切換消耗小
實現 fork() pthread_create()

引入線程使系統的併發性更好,支持多處理機系統: 對傳統的進程,即單處理進程,不管有多少個處理機,都只能在一個處理及上運行,但多線程進程,可以將一個進程中的多個線程分配到多個處理機上,使它們併發執行,加快了進程的完成。

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