NginxI O模型理論基礎

2022-06-25 01:00:21 字數 3112 閱讀 3262

同步io 

關注的是訊息通訊機制  呼叫者需要等待被呼叫者先執行完畢才能往下繼續執行   被呼叫者在執行完自己的任務後並不會同之呼叫者執行結果需要呼叫者自己去獲取被呼叫者的執行狀態

非同步io

關注的是訊息通訊機制     呼叫者向被呼叫者發起呼叫後 被呼叫者會自動通過狀態,通知或者**機制主動通知呼叫者自己的執行狀態

阻塞io

關注呼叫者在等待結果返回之前所處的狀態     指io操作需要徹底完成後才返回到使用者空間,呼叫結果返回之前,呼叫者會被掛起

非阻塞io

關注呼叫者在等待結果返回之前所處的狀態     指io操作被呼叫後立即返回給使用者乙個狀態值,無需等到io操作徹底完成直到最終的呼叫結果返回之前 呼叫者都不會被掛起

以洗衣機洗衣服為例子說明

同步阻塞

同步:洗衣機洗完衣服後不會通知你,所以你不知道具體什麼時候洗完

阻塞: 洗衣機在洗完衣服之前人是不能做其它任何事情 必須守在洗衣機跟前 浪費時間和精力

說明:整個io請 求的過程中,使用者執行緒是被阻塞的,這導致使用者在發起io請求時,不能做任何事情,對cpu的資源利用率不夠 

同步非阻塞

同步:洗衣機洗完衣服後不會通知你,所以你不知道具體什麼時候洗完

非阻塞:  洗衣機在洗完衣服之前人是可以去做其它事情,但是由於不知道什麼時候洗完 需要人隔一段時間就放下當前正在做的事情,跑去洗衣機跟前看看是否洗完衣服 人這樣來回的詢問也會浪費掉許多時間和精力

說明:整個io請求的過程,雖然使用者執行緒每次發起io請求後可以立即返回,但是為 了等到資料,仍需要不斷地輪詢、重複請求,消耗了大量的cpu的資源.是比較浪費cpu的方式,一般很少直接使用這種模型

非同步阻塞

非同步:洗衣機洗完衣服後會自動發出聲響通知人衣服已經洗完

阻塞: 在洗衣機洗完衣服之前人會一直站在洗衣機跟前什麼也不幹  浪費資源

非同步非阻塞

非同步:洗衣機洗完衣服後會自動發出聲響通知人衣服已經洗完

非阻塞: 人在啟動洗衣機後便可以去看電視了,在洗衣的過程中人看電視和洗衣服兩件事情互相不干擾.等洗衣機洗完衣服後發出響聲,這個時候人就知道洗衣已經完成

io多路復用模型

多個連線共用乙個等待機制,本模型會阻塞程序,但是程序是阻塞在select或者poll這兩 個系統呼叫上,而不是阻塞在真正的io操作上 .從流程上來看,使用select函式進行io請求和同步阻塞模型沒有太大的區別,甚至還多了新增監視io,以及呼叫select函式的額外操作,效率更差.但是select可以監控多個io上是否已有io操作準備就緒,即可達到在 同乙個執行緒內同時處理多個io請求的目的.而不像阻塞io那種,一次只能監控乙個io.

io多路復用是最常使用的io模型,但是其非同步程度還不夠「徹底」,因為它使用了會阻 塞執行緒的select系統呼叫.因此io多路復用只能稱為非同步阻塞io模型,而非真正的非同步 io 

訊號驅動io模型

1.資料從磁碟讀取到核心空間這段時間不阻塞

2.資料從核心拷貝到使用者空間這段時間是阻塞的

使用者程序可以通過sigaction系統呼叫註冊乙個訊號處理程式,然後主程式可以 繼續向下執行,當有io操作準備就緒時(資料已經到達核心空間),由核心通知觸發乙個sigio訊號處理程 序執行,然後將使用者程序所需要的資料從核心空間拷貝到使用者空間這段時間相當於是阻塞的

非同步io模型

非同步io與訊號驅動io最主要的區別是訊號驅動io是由核心通知何時可以進行io 操作,而非同步io則是由核心告訴我們io操作何時完成了。具體來說就是,訊號 驅動io當核心通知觸發訊號處理程式時,訊號處理程式還需要阻塞在從核心空 間緩衝區拷貝資料到使用者空間緩衝區這個階段,而非同步io直接是在第二個階段 完成後核心直接通知可以進行後續操作了 

幾乎支援所有的平台,本質上就是通過設定或者檢查存放fd標誌位的資料結構來進行下一步處理

單個程序可監視的fd數量被限制,即能監聽的埠數量有限

對socket是線性掃瞄,即採用輪詢的方式,效率低下

select採取了記憶體拷貝方法來實現核心將fd訊息通知給使用者空間,這樣乙個用來存放大量fd的資料結構,這樣會使的使用者空間和核心空間在傳遞該結構時開銷巨大 

本質上和select沒有區別,它將使用者傳入的陣列拷貝到核心空間,然後查詢每個fd對應的裝置狀態

沒有最大連線數的限制,原因是它是基於鍊錶來儲存

大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是否有意義

poll的特點是  "水平觸發" 如果報告了fd後 沒有被處理,那麼下次還會報告該fd

支援 "邊緣觸發"  它只通知程序哪些fd剛剛變為就緒態,並且只會通知一次

使用 事件 的就緒通知方式,通過epoll_ctl註冊fd,一旦該fd就緒,核心就會採用類似callback的**機制來啟用該fd,epoll_wait便可以收到通知

沒有最大併發連線的限制

非輪詢的方式,不會隨著fd數目的增加而效率下降.只有活躍可用的fd才會呼叫callback函式,即epoll最大的優點就在於它只管理活躍的連線而跟連線總數無關

記憶體拷貝 利用mmap加速與核心空間的訊息傳遞   即epoll使用mmap減少複製開銷 

event-driven(事件驅動)

非同步通知,採用callback的**機制來通知應用程式哪些fd已經處於就緒態狀態

aio(非同步io)

非同步io  把檔案寫入磁碟的時候 先把內容寫入緩衝區中 然後再由系統後台慢慢的從緩衝區同步到磁碟

sendfile

把硬碟資料拷貝到 kernel buffer,然後資料被 kernel 直接拷貝到另外乙個與 socket 相關的 kernel buffer 

預設要把讀取的資料從核心態拷貝到應用態 應用態把資料進行應用層報文封裝 然後再把封裝好的資料再次拷貝回核心態進行網路傳送 sendfile機制減少了這個過程

mmap(記憶體對映)

在記憶體中開闢一塊空間來對映磁碟檔案對應占用的大小,讀取或者修改檔案直接操作對應的記憶體空間即可,大大提高了操作效率.減少了檔案從磁碟讀入記憶體的開銷

TCP IP理論基礎

一 tcp ip的分層模型 osi協議參考模型,它是基於國際標準化組織 iso 的建議發展起來的,它分為7個層次 應用層 表示層 會話層 傳輸層 網路層 資料鏈路層及物理層。這個7層的協議模型雖然規定得非常細緻和完善,但在實際中卻得不到廣泛的應用,其重要的原因之一就在於它過於複雜。但它仍是此後很多協...

TCP IP理論基礎

linux中網路棧的介紹一般分為四層的internet模型。分別為應用層 傳輸層 網際層和網路介面。tcp ip實際上是乙個協同工作的通訊家族,為網路資料通訊提供通路。為方便將tcp ip協議族大致上分為三部分 1.internet協議 ip 這一部分也稱為網路層。主要包括ip icmp和arp。其...

SCM理論基礎

在乙個大型的專案中,會有很多人員,比如說專案管理者 開發人員等,人多的情況下,很可能就會在及時溝通 管理等方面出現問題,具體可以總結為 這些問題的存在,不僅會使我們的開發效率很低,做出來的產品質量也會受影響。有了scm,就很好的解決了這些問題。scmsoftwareconfiguration man...