1.BIO
BIO:是傳統的javaIO以及部分java.net下部分接口和類。例如,socket,http等,因為網絡通信同樣是IO行為。傳統IO基于字節流和字符流進行操作。提供了我們最熟悉的IO功能,譬如基于字節流的InputStream 和OutputStream.基于字符流的Reader和Writer.
特點:在IO執行的兩個階段都被阻塞住。優點:代碼簡單,直觀。缺點:IO的效率,擴展性存在瓶頸。同步。阻塞
2.NIO
NIO 是一種同步非阻塞的 I/O 模型,在 Java 1.4 中引入了 NIO 框架,對應 java.nio 包,提供了 Channel , Selector,Buffer 等抽象。NIO 中的 N 可以理解為 Non-blocking,不單純是 New。它支持面向緩沖的,基于通道的 I/O 操作方法。 NIO 提供了與傳統 BIO 模型中的 Socket 和 ServerSocket 相對應的 SocketChannel 和 ServerSocketChannel 兩種不同的套接字通道實現,兩種通道都支持阻塞和非阻塞兩種模式。阻塞模式使用就像傳統中的支持一樣,比較簡單,但是性能和可靠性都不好;非阻塞模式正好與之相反。對于低負載、低并發的應用程序,可以使用同步阻塞 I/O 來提升開發速率和更好的維護性;對于高負載、高并發的(網絡)應用,應使用 NIO 的非阻塞模式來開發.
特點:程序需要不斷的去詢問內核是否已經準備好,第一階段非阻塞,第二階段阻塞。
NIO的核心是:Channels ,buffers, Selectors.基本上所有的IO在NIO都是從一個Channels開始。
Selector:允許單線程處理多個Channel
NIO的底層使用了操作系統的多路復用。
優點是單線程可以處理多個網絡IO.
(1)問題:select,poll,epoll的區別
Select有最大鏈接數的限制,因為其使用的是數組;poll沒有,使用的是鏈表;
3.AIO
4.BIO,NIO,AIO分析
BIO適用于連接數比較小,且固定的架構。這種方式對服務器資源要求比較高。是1.4以前的唯一選擇,直觀,簡單容易理解。
NIO適用于連接數目多,且連接比較短的架構。比如聊天服務器,編程比較復雜。
AIO適用于連接數目多,且連接比較長的架構。比如:相冊服務器,Jdk7以后才支持。