linux IO學習筆記 (持續更新錯誤)

2021-09-13 09:46:31 字數 1796 閱讀 7938

linux 學習筆記

一、linux的快取io機制

從許可權上來說,核心擁有許可權很高,可訪問所有底層硬體。而使用者(程序)的許可權相對較低,而這樣的目的便是為了保護核心的安全。

從記憶體空間上來說,作業系統把記憶體分成了兩份,乙份給核心用(稱為核心空間),乙份給使用者(程序)用(稱為使用者空間),兩者絕對的互不干擾。(windows的藍屏原因:硬體驅動與系統的不相容,驅動**執行在系統核心空間,如果出錯就會影響到系統核心,進而系統崩潰,機子宕機。而qq崩潰就不會造成機子宕機,因為qq執行在使用者空間)

所以核心的資料與使用者的資料不共享,核心如果要把任務(資料)交給使用者(程序),就會有乙個data copy的過程。

**獲取硬碟檔案內資料的過程(io的一次訪問):使用者(程序)不具有對硬體(硬碟)的許可權,需要申請許可權,通過核心來進行系統呼叫(api)。核心建立 page cache(頁快取)並把使用者需要的資料從硬碟一點一點地讀取到 page cache中,當把所有資料都準備好後,一次**給使用者程序(這是在快取非命中的情況下,如果命中快取則直接返回),於是咱們**也就讀取到了資料,(對比如php的 file_get_contents()的一次檔案讀取過程)。

而寫入的流程則是將上面的流程逆著走一遍。遠端客戶端的資料接收同理,只是讀取的起點與寫入的終點不同而已。

另,不管**(使用者程序)從** fread 資料,遠端客戶端資料也好,硬碟資料也好,都得通過乙個中間人(核心)來讀取(因為沒有對硬體的許可權)。所以在這個怎麼接收資料的問題上產生了難題:如果解決同時接收多個客戶端傳送來的資料的問題(經典的c10k併發)。於是衍生出了五種io網路模型:

而基於這5種io模型,又衍生出很多個伺服器模型(io設計模式),如多程序/執行緒模型,leader/follower,reactor,proactor

二、伺服器模型歷史

第一階段:早期伺服器模型為乙個while死迴圈,接收乙個接連,處理這個連線任務,返回處理結果。全程阻塞,執行中無法處理新的連線。

第二階段:多程序/執行緒模型,即為經典的 「connection per process/thread」,乙個程序或執行緒,對應乙個連線。這樣的話,有多少個程序或執行緒,就能處理多少個連線請求。

至今:對第二階段的優化。多程序/執行緒有很多不足,如資源的拷貝,執行緒的建立銷毀的開銷(leader/follower模型,執行緒池的空閒執行緒的使用),程序數或執行緒數上限的問題(限制了連線請求數),單個執行緒還可以再細化(reactor模型,redis底層採用此模型)等等。以下詳細分開記筆記

三、leader-follower多執行緒模型

執行緒的三種狀態:

1、leader,使命:等待事件任務;特點:始終只有乙個leader;狀態:等待。

2、processing,使命:處理任務ing;狀態:執行中。

3、follower,使命:接收leader 的通知,嘗試搶占鎖,力圖成為leader。狀態:空閒。

執行緒狀態轉化

1、leader 等到事件任務時,放出唯一的一把鎖,通知followers搶鎖(也可能是其它如fifo的形式選leader或其它策略)。確定某個follower成為leader後,自身轉變為 processing 處理任務。

2、processing 處理完任務後,轉變為 follower,加入等待佇列。

優點:普通的多執行緒模型,當主線程接到io事件時,會建立新的子執行緒,把要處理的任務資料 copy 交給新的子執行緒,讓它去解決問題,而主線程繼續等待請求。子執行緒處理完任務後,會退出執行緒並銷毀資源。

1、無頻繁的子執行緒建立、銷毀的開銷

2、無線程間的data copy

四、reactor模型

五、執行緒池,mysql執行緒池

閱讀參考:

維基百科名稱解釋

指標學習筆記(持續更新)

question 1.什麼是指標?2.指標與引用的異同?何時使用指標,何時使用引用?1.c 提供兩種字串 string類物件和c風格的基於指標的char 字串。2.常量指標自身不可改變,而指向的目標可以改變。使用const修飾指標 指向非常量資料的非常量指標 如 int ptr 應用 間接引用指標使...

Linux學習筆記(持續更新)

1.開源軟體的優勢 使用的自由 絕大多數開源軟體免費 研究的自由 可以獲得軟體源 散布及改良的自由 可以自由傳播 改良甚至銷售 2.linux分割槽 必須分割槽 1.1 根分割槽 1.2 swap分割槽 交換分割槽,記憶體兩倍,不超過2g 推薦分割槽 boot 啟動分割槽,200mb 3.臨時改變i...

Linux學習筆記(持續更新)

uptime 用於獲取主機執行時間和查詢linux系統負載等資訊 vmstat vmstat命令可以檢視cpu負載 sar system activity reporter系統活動情況報告 是目前 linux 上最為全面的系統效能分析工具之一,可以從多方面對系統的活動進行報告,包括 檔案的讀寫情況 ...