BIO
- IO阻塞;
- 一個線程處理一個請求(線程之前切換比較耗費資源);
NIO
- 非阻塞:NIO非阻塞;基于事件通知巷送,IO操作本身還是同步;
- Buffer:所有讀寫對象都是緩沖區(qū)矛辕;
- Channel:理解為和Buffer進行操作的通道笑跛;
- Selector:用來管理Channel;
AIO
- NIO升級版聊品,IO操作異步飞蹂;
- 用了Java 的 Future特性;
三者區(qū)別
- BIO 就是傳統(tǒng)的java.io包翻屈,它是基于流模型實現(xiàn)的陈哑,交互的方式是同步、阻塞方式伸眶,也就是說在讀入輸入流或者輸出流時惊窖,在讀寫動作完成之前,線程會一直阻塞在那里厘贼,它們之間的調(diào)用時可靠的線性順序界酒。它的有點就是代碼比較簡單、直觀嘴秸;缺點就是 IO 的效率和擴展性很低毁欣,容易成為應(yīng)用性能瓶頸庇谆。
- NIO 是 Java 1.4 引入的 java.nio 包,提供了 Channel凭疮、Selector饭耳、Buffer 等新的抽象,可以構(gòu)建多路復(fù)用的哭尝、同步非阻塞 IO 程序哥攘,同時提供了更接近操作系統(tǒng)底層高性能的數(shù)據(jù)操作方式。
- AIO 是 Java 1.7 之后引入的包材鹦,是 NIO 的升級版本逝淹,提供了異步非堵塞的 IO 操作方式,所以人們叫它 AIO(Asynchronous IO)桶唐,異步 IO 是基于事件和回調(diào)機制實現(xiàn)的栅葡,也就是應(yīng)用操作之后會直接返回,不會堵塞在那里尤泽,當后臺處理完成欣簇,操作系統(tǒng)會通知相應(yīng)的線程進行后續(xù)的操作。