線程與進程,多線程,多進程,線程併發,線程並行

1、線程、進程概念:

     進程:是程序的一次運行活動,是系統資源分配和調度的一個獨立單位,有獨立的地址空間和系統資源。

     線程:「輕量級進程」,是進程的一個實體,是CPU調度的基本單位。多個線程共享同一個進程的資源。

2、引入線程的好處

(1)線程佔用資源要比進程少的多
(2)建立一個新的線程花費的代價小
(3)切換線程方便
(4)提升併發性

3、多線程

  多線程舉例:好比用瀏覽器,同時進行瀏覽網頁、播放視頻、下載資源、聽音樂等操做

多線程缺點: 
  1. 多線程比多進程成本低,不過性能也更低
  2. 一個線程的崩潰可能影響到整個程序的穩定
  3. 線程多了以後,線程自己的調度也麻煩,須要消耗較多的CPU
  4. 沒法直接獲取系統的資源,整體可以達到的性能上限有限制
  5. 線程之間的同步和加鎖控制比較麻煩

4、 多進程

  多進程舉例:好比同時運行QQ、微信、截圖工具、視頻播放器等

多進程優勢:
  1. 每一個進程互相獨立,子進程崩潰不影響主程序的穩定性
  2. 經過增長CPU,就能夠容易擴充性能
  3. 進程能直接獲取系統的資源,整體可以達到的性能上限很是大

5、同一進程的線程共享哪些資源?

     a. 因爲堆是在進程空間中開闢出來的,因此它是理所固然地被共享的;所以new出來的都是共享的(16位平臺上分全局堆和局部堆,局部堆是獨享的)
     b. 全局變量 它是與具體某一函數無關的,因此也與特定線程無關;所以也是共享的
     c. 局部靜態變量 雖然對於局部變量來講,它在代碼中是「放」在某一函數中的,可是其存放位置和全局變量同樣,存於堆中開闢的.bss和.data段,是共享的
     d. 文件等公用資源 這個是共享的,使用這些公共資源的線程必須同步。Win32 提供了幾種同步資源的方式,包括信號、臨界區、事件和互斥體。

6、線程獨享的資源?

     a. 棧 棧是獨享的
     b. 寄存器 這個可能會誤解,由於電腦的寄存器是物理的,每一個線程去取值難道不同嗎?其實線程裏存放的是副本,包括程序計數器PC
     c. 線程ID

7、併發

     併發是把CPU運行時間劃分紅若干個時間段,每一個時間段再分配給各個線程執行,當一個線程在運行時,其它線程處於掛起狀。從宏觀角度是同時進行的,但從微觀角度並非同時進行。
     CPU根據線程調度算法來切換線程。當正在執行的一個線程須要進行IO操做或者須要訪問內存的時候,CPU徹底能夠放棄該線程,轉而調度線程就緒隊列上的其餘線程,被放棄的線程則進入阻塞狀態,IO操做或者訪問內存操做結束以後,該線程能夠進入線程就緒隊列上。
     典型的線程調度算法:(1) FIFO算法。在非搶佔式系統中,全部的線程構成一個先進先出隊列,最早進入隊列的線程得到CPU,等到放棄處CPU時,又回到隊列尾部,下一個線程繼續執行。如有新的線程進來,則添加到隊列尾部。(2) 時間片輪轉調度算法。(3) 優先級調度算法。


8、並行

並行是同一時刻當一個CPU執行一個線程時,另外一個CPU能夠執行另外一個線程,兩個線程互不搶佔CPU資源,是真正意義上的不一樣線程在同一時刻同時執行。