1、同步與異步
同步與異步主要是從消息通知機制角度來說的。同步沒有通知,異步有知。
2、阻塞與非阻塞
阻塞與非阻塞主要是程式等待消息通知時的狀态角度來說的。阻塞調用是指調用結果傳回之前,目前線程會被挂起,一直處于等待消息通知,不能夠執行其他業務。
3、同異步與阻非塞
(1)同步阻塞
下載下傳一個檔案,下載下傳人不做任何事情,看着進度條下載下傳完成。
(2)同步非阻塞
下載下傳一個檔案,下載下傳人不做任何事情,等待下載下傳完成的通知。
(3)異步阻塞
下載下傳一個檔案,下載下傳人做其他事情,隔斷時間看着進度是否下載下傳完成。
(4)異步非阻塞
下載下傳一個檔案,下載下傳人做其他事情,等待下載下傳完成的通知。
4、LINUX IO 模型
4.1、LINUX IO 操作步驟
網絡IO的本質是socket的讀取,socket在linux系統被抽象為流,IO可以了解為對流的操作。例如當一個read操作發生時,它會經曆兩個階段:
第一階段:等待資料準備。
第二階段:将資料從核心拷貝到程序中。
對于socket流而言,
第一步:通常涉及等待網絡上的資料分組到達,然後被複制到核心的某個緩沖區。
第二步:把資料從核心緩沖區複制到應用程序緩沖區。
4.2、LINUX IO 模型分類
(1)同步模型(synchronous IO)
阻塞IO(bloking IO)
非阻塞IO(non-blocking IO)
多路複用IO(multiplexing IO)
信号驅動式IO(signal-driven IO)
(2)異步IO(asynchronous IO)
4.3、Linux IO模型矩陣
image.png
4.4、Linux 阻塞IO
4.5、Linux 同步非阻塞IO
4.6、Linux 同步非阻塞IO多路複用
4.7、Linux 異步信号驅動
4.8、Linux 總結
5個IO模型