多線程(線程概念、線程控制、線程安全、線程基本應用)

多線程

  • 線程概念
  • 線程控制
  • 線程安全
  • 線程基本應用

線程概念

功能:進行多任務處理
一個進程能夠完成任務的處理,通過pcb的描述,完成對程序的調度處理。

多任務處理:

  • 多創建幾個進程,一個進程就有一個pcb,能夠串行化的完成一個任務;
  • 在一個進程中多創建幾個pcb,因爲pcb是調度程序運行的描述,因此有多少個pcb就有多少個執行流程。

在進程中,我們說進程就是一個pcb,是程序動態運行的描述,通過pcb可以實現操作系統對程序運行的調度管理。現在學習的多線程,我們說線程是進程中的一條執行流,這個執行流在Linux下是通過pcb實現的,因此實際上Linux下的線程就是一個pcb,然而pcb是進程,並且Linux下的pcb共用一個虛擬地址空間,相較於傳統pcb更加輕量化,因此也被稱爲輕量級進程

示例:
在這裏插入圖片描述

多進程

在這裏插入圖片描述

多線程

在這裏插入圖片描述
Linux下的進程其實是一個線程組,一個進程中可以有多個線程(多個pcb),編程是進程中的一條執行流。(進程(一個工廠),線程(工廠中幹活的工人),在Linux下幹活的就是pcb)。

進程:是一個程序動態的運行,其實就是一個程序運行的描述 - - - pcb。
線程:是進程中的一條執行流,執行一個程序中的某段代碼。

在Linux下pcb可以實現程序的調度運行,因此在實現線程的時候,使用了pcb來實現;創建線程會伴隨在內核中創建一個pcb來實現程序的調度,作爲進程中的一條執行流。進程就是多個線程的一個合集,並且這個進程中的所有pcb共用進程中的大部分資源(程序運行時,操作系統爲程序運行所分配的所有資源),因此這些pcb在Linux下又稱爲輕量級進程。

根據不同學習階段,對pcb有不同的理解

  • 第一階段:pcb是進程,用於調度一個程序運行;
  • 第二階段:pcb是線程,是輕量級進程(爲了跟印象中的傳統進程進行區分),因爲線程是運行中程序的一條執行流,Linux下通過pcb實現這個執行流,並且共用同一份運行資源。

進程是操作系統資源分配的基本單位;(操作系統會爲一個程序的的運行分配所需的所有資源)
線程是cpu調度的基本單位

線程之間的獨有與共享

  • 獨有:標識符、寄存器、棧、信號屏蔽字、errno(系統調用完畢後會重置一個全局變量)、優先級。
  • 共享:虛擬地址空間(代碼段/數據段)、文件描述符表、信號處理的回調函數、用戶ID/組ID/工作路徑。

多線程/多進程進行多任務處理的優缺點分析

多線程的優點:
  • 線程間通信更加靈活方便;(除了進程間通信方式之外還有全局變量以及函數傳參 - - - 共有同一個虛擬地址空間,只要知道地址就能訪問同一塊空間);
  • 線程的創建和銷燬成本更低(創建線程創建一個pcb,共用的數據只需要使用一個指針指向同一處就可以了);
  • 同一個進程中的線程間調度成本更低(調度切換需要切換頁表);
多進程的優點:
  • 多進程的健壯性,穩定性更高(異常以及一些系統調用(如:exit)直接針對整個進程生效);
共同的優點:
  • IO密集型程序:多任務並行處理(多磁盤可以實現同時處理);
    (IO密集型:程序中大量進行IO操作,對cpu要求並不高,因此執行流個數沒有太大要求);
  • CPU密集型程序:程序中進行大量的數據運算處理;cpu資源足夠,就可以同時處理,提高效率(通常執行流的個數是cpu核心數+1),創建線程很多的話,而cpu資源不夠多,會造成進程切換調度成本提高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章