JAVA minaio模型_分布式系统之Java IO模型
1.正確理解IO定義
IO涉及兩個系統對象,一個是用戶進程,一個是系統內核
阻塞IO和非阻塞IO 針對是對用戶進程來講的調用函數。
同步IO和異步IO針對的是系統內核。
select,poll,epoll是Linux系統使用最多的IO多路復用機制,采用的都是同步IO。
IO讀取過程
2.Java IO
BIO/NIO/AIO
BIO
BIO 使用簡單,適用于連接數少并發不高的場景(因為服務端線程數量和客戶端訪問數成正比,很容易膨脹,耗盡資源,可以通過線程池做一定的優化,但本質上還是受資源限制明顯)。
NIO JDK1.4 引入,從最初的select/poll,到1.5增加了對epoll的支持。
NIO 里面幾個核心概念
Buffer(數據操作的對象),Channel(可同時讀寫操作,代替BIO每次訪問建立的線程,降低資源消耗),Selector(channel的注冊,監聽,輪詢;一個selector可以管理成百上千個 channel,而Selector只是一個線程)。
參考
NIO Reactor模式
數據讀取流程
1.Selector阻塞并等待事件發生。
2.Selector被喚醒,發送讀就緒事件給預先注冊的事件處理器
3.應用程序讀取數據
4.應用程序處理相關業務邏輯
Selecor是NIO的關鍵,NIO采用的是非阻塞IO模型。原生Java接口開發網絡應用中使用最多的。
NIO的實現框架 Netty,Mina.Netty在內存管理和綜合性能上更勝一籌。Netty內部通過封裝 Java NIO實現了零拷貝的功能(不用將數據復制到用戶進程,直接發送到網絡)。
AIO 采用Proactor模式
與NIO模式類似,只是AIO 是由操作系統執行完讀寫后,通知回調方法,由回調方法處理業務邏輯。其采用的是異步 IO。
有兩種使用方式
1.使用java.util.concurrent.future訪問,通過get獲取結果,本質上還是同步,不推薦
回調方式,通過java.nio.channels.CompletionHandler的completed和failed回調方法,應用開發者可以覆蓋實現自己的業務邏輯
總結
以上是生活随笔為你收集整理的JAVA minaio模型_分布式系统之Java IO模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络切片技术缺点_一文读懂网络切片 -
- 下一篇: 华为鸿蒙os2.0系统何时搭载手机,鸿蒙