進程與線程

進程基本概念

進程是對運行時程序的封裝,是系統進行資源調度和分配的基本單位,實現操作系統的併發

線程基本概念

  • 線程是進程的子任務,是cpu調度和分配的基本單位,用於保證程序的實時性,實現進程內的併發;
  • 線程是操作系統的可識別的最小執行和調度的單位。
  • 每個線程都獨立佔用一個虛擬處理器:獨立的寄存器組,指令計數器和處理器狀態。
  • 每個線程完成不同的任務,但是共享同一地址空間(也就是同樣的動態內存,映射文件,目標代碼等等),打開的文件隊列和其他內核資源

兩者的區別

\ 進程 線程
兩者的聯繫 一個進程可以有多個線程,但至少有一個線程 線程依賴進程存在,一個線程只能屬於一個進程
內存空間 擁有獨立的內存空間 多個線程共享該進程的所有資源,共享代碼段(代碼和常量),數據段(全局變量和靜態變量),擴展段(堆存儲)。但是每個線程擁有自己的棧段(運行時段,用來存放所有局部變量和臨時變量)
與系統關係 是資源分配的最小單位 是cpu調度的最小單位
系統開銷 由於在創建或撤銷進程時,系統都會爲之分配和回收資源,因此操作系統爲進程所付出的開銷遠大於線程,類似地,在進行進程切換時,涉及到整個當前進程CPU環境的保存以及新被調度運行的進程的CPU環境的設置。 而線程切換隻須保存和設置少量寄存器的內容,並不涉及存儲器管理方面的操作。可見,進程切換的開銷也遠大於線程切換的開銷。
通信 進程間通信比較複雜 同一進程的線程由於共享代碼段和數據段,所以通信比較容易。
編程調試難度 編程調試簡單可靠性高,但是創建銷燬開銷大 線程正相反,開銷小,切換速度快,但是編程調試相對複雜。
穩定性 一個進程崩潰,不會對其他進程產生影響; 而一個線程崩潰,會讓同一進程內的其他線程也死掉。

進程間的通信

通信方式 概述 特點
1,管道 管道主要包括無名管道和命名管道 管道可用於具有親緣關係的父子進程間的通信
1.1 普通管道PIPE 它是半雙工的(即數據只能在一個方向上流動),具有固定的讀端和寫端 1. 它只能用於具有親緣關係的進程之間的通信(也是父子進程或者兄弟進程之間)2.它可以看成是一種特殊的文件,對於它的讀寫也可以使用普通的read、write等函數。但是它不是普通的文件,並不屬於其他任何文件系統,並且只存在於內存中。
1.2 命名管道FIFO FIFO可以在無關的進程之間交換數據 FIFO有路徑名與之相關聯,它以一種特殊設備文件形式存在於文件系統中。
系統IPC 包括消息隊列、信號量、信號、共享內存
消息隊列 是消息的鏈接表,存放在內核中。一個消息隊列由一個標識符(即隊列ID)來標記。 (消息隊列克服了信號傳遞信息少,管道只能承載無格式字節流以及緩衝區大小受限等特點)具有寫權限得進程可以按照一定得規則向消息隊列中添加新信息;對消息隊列有讀權限得進程則可以從消息隊列中讀取信息; 1)消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級。2)消息隊列獨立於發送與接收進程。進程終止時,消息隊列及其內容並不會被刪除。3)消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。
信號量 它是一個計數器,可以用來控制多個進程對共享資源的訪問。信號量用於實現進程間的互斥與同步,而不是用於存儲進程間通信數據。 1)信號量用於進程間同步,若要在進程間傳遞數據需要結合共享內存。2)信號量基於操作系統的 PV 操作,程序對信號量的操作都是原子操作。3)每次對信號量的 PV 操作不僅限於對信號量值加 1 或減 1,而且可以加減任意正整數。4)支持信號量組。
信號 比較複雜 用於通知接收進程某個事件已經發生。
共享內存 它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等 (1)共享內存是最快的一種IPC,因爲進程是直接對內存進行存取 (2)因爲多個進程可以同時操作,所以需要進行同步(3)信號量+共享內存通常結合在一起使用,信號量用來同步對共享內存的訪問
套接字socket socket也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同主機之間的進程通信。

線程間的通信

  • 臨界區:通過多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問;

  • 互斥量Synchronized/Lock:採用互斥對象機制,只有擁有互斥對象的線程纔有訪問公共資源的權限。因爲互斥對象只有一個,所以可以保證公共資源不會被多個線程同時訪問

  • 信號量Semphare:爲控制具有有限數量的用戶資源而設計的,它允許多個線程在同一時刻去訪問同一個資源,但一般需要限制同一時刻訪問此資源的最大線程數目。

  • 事件(信號),Wait/Notify:通過通知操作的方式來保持多線程同步,還可以方便的實現多線程優先級的比較操作

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