一、 Java I/O 模型演進史:從阻塞到事件驅動
網路 I/O 本質上是作業系統核心與硬體網卡之間的資料搬移。Java 經歷了三次重大變革:
二、 Java 原生 NIO 三大基石架構
三、為什麼生產環境不直接寫原生 Java NIO?
幾乎所有分散式中介軟體(Dubbo、RocketMQ、Elasticsearch、Spark)的網路層都放棄了Java原生 NIO,原因如下:
API 極其繁複且不易維護:ByteBuffer的flip()、compact()、clear() 指針轉換極易出錯;黏包與半包(Packet Fragmentation)需開發者完全手動處理。
斷線重連與心跳機制繁重:網路閃斷、慢速連線、半關閉狀態等邊界異常處理極度複雜。
臭名昭著的JDK Epoll Bug(CPU 100% 死迴圈):
在特定Linux核心條件下,即使沒有任何就緒事件,Selector.select() 也會被異常喚醒,導致輪詢迴圈瘋狂空轉,CPU 瞬間打滿至 100%。
四、 Netty 核心架構解析與極致效能密碼
Netty 是基於 Java NIO 封裝的非同步事件驅動網路通訊框架,它在底層進行了大量的工業級工程最佳化: