進程與線程


   進程

  我們都知道計算機的核心是CPU,它承擔了所有的計算任務,而操作系統是計算機的管理者,它負責任務的調度,資源的分配和管理,

統領整個計算機硬件;應用程序是具有某種功能的程序,程序是運行於操作系統之上的。

  進程是一個具有一定獨立功能的程序在一個數據集上的一次動態執行的過程,是操作系統進行資源分配和調度的一個獨立單位,是應用

程序運行的載體。進程是一種抽象的概念,從來沒有統一的標准定義。進程一般由程序,數據集合和進程控制塊三部分組成。程序用於描述

進程要完成的功能,是控制進程執行的指令集;數據集合是程序在執行時所需要的數據和工作區;程序控制塊包含進程的描述信息和控制信息

是進程存在的唯一標志

進程具有的特征:

動態性:進程是程序的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的;

並發性:任何進程都可以同其他進行一起並發執行;

獨立性:進程是系統進行資源分配和調度的一個獨立單位;

結構性:進程由程序,數據和進程控制塊三部分組成

  線程

  在早期的操作系統中並沒有線程的概念,進程是擁有資源和獨立運行的最小單位,也是程序執行的最小單位。任務調度采用的是時間片

輪轉的搶占式調度方式,而進程是任務調度的最小單位,每個進程有各自獨立的一塊內存,使得各個進程之間內存地址相互隔離。

  后來,隨着計算機的發展,對CPU的要求越來越高,進程之間的切換開銷較大,已經無法滿足越來越復雜的程序的要求了。於是就發明

了線程,線程是程序執行中一個單一的順序控制流程,是程序執行流的最小單元,是處理器調度和分派的基本單位。一個進程可以有一個或

多個線程,各個線程之間共享程序的內存空間(也就是所在進程的內存空間)。一個標准的線程由線程ID,當前指令指針PC,寄存器和堆棧組

成。而進程由內存空間(代碼,數據,進程空間,打開的文件)和一個或多個線程組成。

  進程與線程的區別

1. 線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位;

2. 一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線

3. 進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段,數據集,堆等)及一些進程級的資源(如打開文件和信

號等),某進程內的線程在其他進程不可見;

4. 調度和切換:線程上下文切換比進程上下文切換要快得多

線程和進程關系示意圖

  

 

  總之,線程和進程都是一種抽象的概念,線程是一種比進程還小的抽象,線程和進程都可用於實現並發。

在早期的操作系統中並沒有線程的概念,進程是能擁有資源和獨立運行的最小單位,也是程序執行的最小單位,它相當於

一個進程里只有一個線程,進程本身就是線程。所以線程有時被稱為輕量級進程

  后來,隨着計算機的發展,對多個任務之間上下文切換的效率要求越來越高,就抽象出一個更小的概念-線程,一般一個進程會有多個

(也可以是一個)線程。

   

任務調度

  大部分操作系統的任務調度是采用時間片輪轉的搶占式調度方式,也就是說一個任務執行一小段時間后強制暫停去執行下一個任務,每個

任務輪流執行。任務執行的一小段時間叫做時間片,任務正在執行時的狀態叫運行狀態,任務執行一段時間后強制暫停去執行下一個任務,被

暫停的任務就處於就緒狀態,等待下一個屬於它的時間片的到來。這樣每個任務都能得到執行,由於CPU的執行效率非常高,時間片

非常短,在各個任務之間快速地切換,給人的感覺就是多個任務在“同時進行”,這也就是我們所說的並發

    

為何不使用多進程而是使用多線程?

    線程廉價,線程啟動比較快,退出比較快,對系統資源的沖擊也比較小。而且線程彼此分享了大部分核心對象(File Handle)的擁有權

    如果使用多重進程,但是不可預期,且測試困難


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM