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


一、線程、進程概念:

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

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

二、引入線程的好處

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

三、多線程

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

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

四、 多進程

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

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

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

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

六、線程獨享的資源?

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

七、並發

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


八、並行

並行是同一時刻當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶占CPU資源,是真正意義上的不同線程在同一時刻同時執行。

    


免責聲明!

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



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