同步阻塞IO(JAVA BIO/Blocking IO ): 同步并阻塞,服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷.
Java NIO(Non-Blocking IO ) : 同步非阻塞,服務器實現模式為一個請求一個線程,即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。NIO的優點在于首先基于緩存讀寫文件,能夠批量操作,然后用channel雙向讀寫數據,減少每次打開斷開流的資源消耗。
引入selecore的概念,用一個線程管理多個通道,大大減少線程開銷。
Java AIO(NIO.2) : 異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理,NIO方式適用于連接數目多且連接比較短(輕操作)的架構,
比如聊天服務器,并發局限于應用中,編程比較復雜,JDK1.4開始支持。AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與并發操作,編程比較復雜,JDK7開始支持I/O屬于底層操作,需要操作系統支持,并發也需要操作系統的支持,所以性能方面不同操作系統差異會比較明顯。另外NIO的非阻塞,需要一直輪詢,也是一個比較耗資源的。所以出現AIO