linux多任務線程多進程、進程間通信

本來今晚是打算搞C++的,但無奈校園網太垃圾了,裝個VS17版本的軟件到現在還沒完成。。。(心累)

想想,寫寫筆記吧。。。

首先我們要明白一個概念:多任務處理。
多任務處理是指用戶可以在同一時間內運行多個應用程序,在此,我們稱每一個正在執行的應用程序爲一個任務。而我們熟知的linux就是一個支持多任務的操作系統。

這種多任務的操作系統使用某種調度策略能支持多個任務併發執行,補充下:我們知道,單核的處理器在某一時間內只能執行一個任務,每一個任務創建時被分配時間片上,當CPU執行任務時,時間片就會遞減(這個道理我相信有些人還是懂的)。操作系統會給當前人任務的時間片用時調度其他任務,特別對於單核的處理器來說,任務會頻繁地切換執行,因此會給人多個任務同時運行的感覺。

從本質上看,我們目前的單核CPU還不足做到同一時間內可以執行多個任務,這個現在還是無法實現的;有點類似於人一心不能二用。哈哈哈~

多任務操作系統中通常有3個概念:任務、進程和線程。

一、任務

首先,任務是一個邏輯概念,是指一個軟件完成的活動,或者是爲實現某個目的的一系列操作。通俗來講,就是一個任務代表了一個程序的一次運行。注意!是一個程序的一次運行,而不是一個程序,不一樣的!

一個任務裏面可能包含一個或多個獨立功能的子任務,那麼這個獨立的子任務就是進程或者線程。比如,你玩一個遊戲,這可以看成是一個任務;在遊戲中,你與敵人“對打”,對方扣血你也扣血,其實這是兩個獨立的子任務來着對吧?同時,這個遊戲還有聲音、音效,這又是另外幾個獨立的子任務在運行了。

二、進程

進程是指一個具有獨立功能的程序在某個數據集合上的一次動態執行過程,它是操作系統進行資源分配和調度的基本單元。每一個進程擁有自己的數據段、代碼段和堆棧段。
進程具有併發性、動態性、交互性和獨立性。

  • 併發指的是系統中的多個進程可以同時併發執行,互不干擾(這裏的互不干擾主要指的是物理地址)。
    動態性指的是進程具有完整的生命週期和動態的地址空間,它不同於程序,程序是死的,它固定不變。
    交互性是指進程在執行的過程中可能會與其他進程發生直接或間接的通信,如進程同步或進程互斥等;於是,我們規定了特定的通信機制來實現進程間的通信。
    獨立性指的是每一個進程的地址空間是相互獨立的,這與前面的併發性息息相關。

(1)進程的類型

主要包含:交互式進程、批處理進程和守護進程
這裏概念就不說了,舉例子吧。
典型的交互式進程我們接觸到的有:shell命令進程、文本編輯器和圖形應用程序等;
批處理進程一般都只在後臺運行,有:數據庫搜索引擎、編譯器的編譯操作;
守護進程,這名字一聽就是“守護”來着,它們一直在後臺運行,而且與任何的終端都不關聯。它的生命週期算是最長了,這類一般都是系統進程。

(2)進程的結構

三、線程

前面說到,它是操作系統進行資源分配和調度的基本單元。但由於操作系統在進程間的切換時開銷比較大,所以爲了提高效率,系統又引入了一個新的概念——線程。

線程有個別名,叫輕量級進程。線程可以對進程的內存空間和資源進行訪問,與同一進程中的其他線程共享。注意!這說明了同一個進程內的多個線程它們的物理地址其實是一樣的!線程同樣也是具有併發性的,可是它的併發性在CPU看來根本就不是併發的,這個道理我相信大家都懂。

互斥鎖線程控制
互斥鎖只有兩種狀態:上鎖和解鎖

信號量線程控制
信號量本質上是一個非負的整數計數器,它用來控制公共資源訪問

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