I/O 多路複用依賴事件多路分離器,將 I/O 事件分發到對應的讀/寫處理器。這裡涉及兩種核心模式:
Reactor 回調時表示「設備可操作」,由處理器發起操作;Proactor 回調時表示「操作已完成」,數據已由 OS 複製到用戶緩衝區。Proactor 依賴 OS 底層異步 API(如 Windows IOCP),屬於「系統級」真異步。
| 模型 | Java 版本 | 核心組件 | 適用場景 |
|---|---|---|---|
| BIO (Blocking I/O) | JDK 1.0+ | Socket, ServerSocket | 連接數少、固定架構 |
| NIO (Non-blocking I/O) | JDK 1.4+ | Channel, Selector, Buffer | 高併發、長連接、頻繁交互 |
| AIO (Asynchronous I/O) | JDK 1.7+ | AsynchronousSocketChannel, CompletionHandler | 超高併發、大文件傳輸 |
傳統阻塞模型:ServerSocket.accept() 阻塞等待連接,每連接一線程。缺點:線程資源消耗大、連接建立慢、無法支撐大量併發。可用線程池緩解,但面臨競爭與超時控制問題。
基於 Selector 多路複用:單線程監聽連接事件,多線程處理讀寫事件。實現「one request one thread」,連接無數據時不佔用工作線程。適合連接數大但同時活躍請求較少的場景(如聊天服務器)。
DatagramSocket + DatagramPacket,無連接、不可靠DatagramChannel + ByteBufferMulticastSocket 實現一對多廣播,適用於狀態同步(如 JGroups、eBay 搜索節點同步)理解 Reactor/Proactor 本質,結合業務場景選擇合適的 I/O 模型,是構建高性能網絡應用的關鍵。