一、IO模型的基礎理解
什么是IO?
IO全稱是 Input/Output(輸入/輸出),在計算機科學里主要指程序與外部設備(硬盤、網絡、用戶終端等)進行數據交換的操作。首要特點是:
- IO通常很慢(從CPU和內存的視角看)
- 經常需要等待外部設備響應
1. 為什么要談IO模型?
當一個程序需要讀寫數據(比如網絡服務器接收請求,或者讀取硬盤文件),操作系統必須處理這些操作的細節,尤其涉及到“等待”。
假設你的程序是單線程的,如果你直接調用阻塞IO函數,比如 read()
從網絡讀數據:
- 如果數據沒到,程序就卡住等待,什么都干不了。
- 這樣程序效率低下,不能同時處理大量IO請求。
所以應用程序和操作系統設計了不同的“IO模型”來解決這個問題:讓程序更高效地處理IO,避免堵塞,能夠同時處理多個客戶端請求。
2. IO模型分類
常見的IO模型主要有:
- 阻塞IO(Blocking IO)
- 非阻塞IO(Non-blocking IO)
- IO復用(Multiplexing IO)
- 信號驅動IO(Signal-driven IO)
- 異步IO(Asynchronous IO)