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