java nio有哪些功能_如何真正理解java中的NIO?
從歷史進程來看可能會比較好
早期計算機性能較差的情況下反正你同時也沒法同時處理很多io,不如開一個就阻塞在那邊,程序員編程也省事,別的花里胡哨的騷操作還未必有這種方式性能高,這個叫做bio
后面cpu內存性能上去了,磁盤還那樣,磁盤io成瓶頸了,就弄了新api出來,掃描出傳輸完畢數據就緒的io句柄進行操作,這里因為早期cpu核心數少,所以掃描出就緒的io句柄都是同步一個個執行的,這個叫nio
再后來,cpu核心數多了,發現這種按模式就是一核有難3核圍觀,就使用空間復雜度更高的實現方式把處理就緒io句柄異步分發到線程池里執行,這個叫做aio
同期,互聯網用戶的量上來了,然后網絡通信占用的連接數指數增加,然后發現linux最早提供的把所有io句柄放在一個list里scan就緒io句柄的實現在1w鏈接情況下因為o(n)時間復雜度變成了性能瓶頸,于是就提供了一個基于二叉樹實現的發現就緒句柄的api,叫做epoll
再后來,程序員把網絡這塊的性能反復挖掘,發現每次網絡io數據都要從網卡拷貝到操作系統,然后操作系統再拷貝到應用內,應用內自身可能又被反復拷貝來拷貝去做處理,于是就弄出來各種框架,有用于應用內零拷貝的封裝實現(netty的bytebuffer),有直接訪問操作系統數據的零拷貝實現(堆外內存映射),甚至有框架直接旁路了操作系統,在應用層直接訪問網卡數據(dpdk)
各種api基本上就是個填坑史
總結
以上是生活随笔為你收集整理的java nio有哪些功能_如何真正理解java中的NIO?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吉利纯电小型SUV几何E上市:8.68万
- 下一篇: 微型计算机中最小的单位,微型计算机中最小