搜尋
首頁後端開發PHP7PHP7核心剖析之I/O模型

1.同步:我客戶端(C端呼叫者)一個功能,該功能沒有結束前,我死等結果。

2.非同步:我(c端呼叫者)呼叫一個功能,不知道該功能結果,該功能有結果後通知我,即回調通知

3.阻塞:就是調用我(s端被呼叫者,函數),我(s端被呼叫者,函數)沒有完全接受完資料或沒有得到結果之前,我不會回傳。

4.非阻塞:就是呼叫我(s端被呼叫者,函數),我(s端被呼叫者,函數)立即返回,得出結果後通知呼叫者

#五種I/O模型

(1) 阻塞I/O (Blocking I/O)

PHP7核心剖析之I/O模型

當使用者程式進行系統呼叫時,核心就開始了I/O的第一個階段,準備資料到緩衝區中,當資料都準備完成後,則將資料從核心緩衝區中拷貝到用戶進程的記憶體中,這時用戶進程才解除block的狀態重新運作。

(2) 非阻塞I/O (Non-Blocking I/O)

PHP7核心剖析之I/O模型

#使用者程序只有在第二個階段被阻塞了,而第一個階段沒有阻塞,但是在第一個階段中,用戶進程不需要盲等,不停的去輪詢內核,看數據是否準備好了,因此該模型是比較消耗CPU的。

(3) I/O復用(I/O Multiplexing)

PHP7核心剖析之I/O模型

#I/O執行的兩個階段都是使用者程式都是阻塞的,但是兩個階段是獨立的,在一次完整的I/O操作中,該用戶進程是發起了兩次系統呼叫。和阻塞I/O不同的是第一段可以等待多個描述符就緒

(4) 訊號驅動的I/O (Signal Driven I/O)

PHP7核心剖析之I/O模型

只有在I/O執行的第二階段阻塞了使用者流程,而在第一階段是沒有阻塞的。此模型在I/O執行的第一階段,當資料準備完成之後,會主動的通知使用者進程資料已經準備完成,也就是對使用者進程做一個回呼。該通知分為兩種,一為水平觸發,即如果用戶進程不響應則會一直發送通知,二為邊緣觸發,即只通知一次。

(5) 非同步I/O (Asynchrnous I/O)

PHP7核心剖析之I/O模型

#當使用者處理啟動系統呼叫後,立刻就可以開始去做它的事情,然後直到I/O執行的兩個階段都完成之後,核心會給用戶進程發送通知,告訴用戶進程操作已經完成了。

I/O多路復用技術

select

#(1).select()的機制中提供一fd_set的資料結構,每個元素都能與一打開的文件句柄(不管是Socket句柄,還是其他文件或命名管道或設備句柄)建立聯繫,建立聯繫的工作由程式設計師完成, 當調用select()時,由內核根據IO狀態修改fd_set的內容,由此來通知執行了select()的程序哪一Socket或檔案可讀或可寫。主要用於Socket通訊當中。

(2).程式執行select後,如果沒有資料輸入,程式會一直等待(阻塞時),直到有資料為止,也就是程式中不需要循環和sleep。

(3).每次呼叫select,都需要把fd_set集合從用戶態拷貝到內核態,這個開銷在fd_set很多時會很大

(4).同時每次呼叫select都需要在內核遍歷傳遞進來的所有fd_set,這個開銷在fd_set很多時也很大

(5).select支援的檔案描述符數量太小了,預設是1024

poll

(1).poll的實作和select非常相似,只是描述fd_set集合的方式不同,poll使用pollfd鍊錶結構而不是select的fd_set結構,其他的都差不多。

(2).監視描述子個數無上限;

epoll/kqueue

(1).監視描述符個數無上限;

(2).效率提升,不是輪詢的方式,不會隨著fd數目的增加效率下降。只有活躍可用的fd才會呼叫callback函數;即epoll/kqueue最大的優點就在於它只管你「活躍」的連接,而跟連接總數無關,因此在實際的網路環境中,epoll/kqueue的效率就會遠高於select和poll。

(3).記憶體拷貝,利用mmap()檔案映射記憶體加速與核心空間的訊息傳遞;

以上是PHP7核心剖析之I/O模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具