支撐 Java NIO 與 NodeJS 的底層技術
眾所周知在近幾個版本的Java中增加了一些對Java NIO、NIO2的支援,與此同時NodeJS技術棧中最為人稱道的優勢之一就是其高效能IO,那麼我們今天要討論的話題就是支撐這些技術的底層技術。
開始之前先要提出的一個問題是:
為什麼NodeJS和Java NIO2沒有在更早的時間出現?
答案:個人認為是底層的支撐技術還不成熟。
那麼,底層技術指的是什麼呢?對的,我想很多人已經猜到,是作業系統技術。本文提出的兩個概念Java NIO2和NodeJS無一例外都是使用者態技術或者說是應用層技術,而這些應用層技術是執行於OS之上的,與此同時隨著作業系統的進步,可以支撐的程式設計模型也更加的豐富。可以這麼說,這兩項技術完全是為了應用作業系統進步帶來的紅利而進化出來的技術。一般來說最先享受這種紅利的技術一定是C\C++,因為OS的進步最新提供的大部分是系統呼叫,而C\C++是最方便應用這些系統呼叫的,但是同時也是最複雜的。其他平臺為了也獲得同樣的效能,就必須不斷的進化,封裝,使使用者可以用上這些紅利,一旦那個平臺停滯更新,也就是這個平臺沒落的時候了。對使用者來說封裝的越方便,對使用者來說就越是友好,可能使用的人就越多。雖然很多人可以很快的寫出基於這些平臺的程式碼,但是往往不得其精髓,因為本質上還是不理解這些技術的動機和原理。下面我們討論的這些技就是這兩項技術相關的底層技術。
不管哪一種OS設計中,下面5種IO模型都是必不可少的。
- 1. blocking I/O
- 2. nonblocking I/O
- 3. I/O multiplexing (select, poll and epoll)
- 4. signal driven I/O (SIGIO)
- 5. asynchronous I/O (the POSIX aio_ functions)
1. blocking I/O
如圖所示,這種IO模型的優點是程式設計簡單,也是OS最早支援的IO模型之一,缺點是系統呼叫阻塞使用者動態執行緒執行,從而造成CPU時間浪費,IO效率低。
2. nonblocking I/O
如圖所示,這種IO模型的一個改進是IO是非阻塞了,但是需要長輪詢,同樣浪費CPU時鐘週期。
3. I/O multiplexing (select, poll and epoll)
如圖所示,這種IO模型是當今OS提供的最穩定的IO模型,大部分主流的應用都是基於此種IO模型構建的,比如NodeJS,但是這些平臺往往在這種模型之上增加一層封裝來直接支援AIO。
4. signal driven I/O (SIGIO)
如圖所示,資料記載這種IO模型由於對比模型3沒有效能優勢,同時由於系統支援不穩定,很少為設計者採用。
5. asynchronous I/O (the POSIX aio_ functions)
如圖所示,此種IO模型是最完美的AIO,程式設計模型也最簡單,但是能夠完美支持者個模型的OS很少,網上資料顯示Linux正在做這方面的努力,一旦OS在這個方面上取得進展,程式設計框架,平臺,程式設計模型可能還是需要有很大程度的簡化。
雖然這種模型很少有OS的支援,但是並不是說現在就沒有這種AIO模型,很多框架做了這方面的工作,在使用者態模擬了AIO,使使用者可以更多的關注業務邏輯程式碼。
6. 同步非同步,阻塞和非阻塞
同步和非同步是針對應用程式和核心的互動而言的。一直等到資料讀完再返回的是同步,直接返回的是非同步。阻塞和非阻塞是對程式、執行緒而言的,阻塞方式下讀取或者寫入執行緒一直等待,而非阻塞方式下,讀取或者寫入執行緒立即返回一個狀態值。
相關文章
- 聊聊JUC包下的底層支撐類-AbstractQueuedSynchronizer(AQS)AQS
- 阿里Java架構師背後的技術體系支撐(詳細分層,建議收藏)阿里Java架構
- 揭祕阿里Java架構師背後的技術體系支撐(詳細分層,建議收藏)阿里Java架構
- 技術分析:AnalyticDB強力支撐雙11
- java底層鏈遊系統開發技術功能(成熟技術)Java
- MSTP技術支撐大客戶專線——VecloudCloud
- GIS :元宇宙未來發展的有力技術支撐元宇宙
- 華誼騰訊娛樂的轉型支點,獴哥健康怎麼構建底層支撐力?
- [TcaplusDB知識庫]資料庫支撐底盤引擎計算層介紹資料庫
- AIGC底層技術介紹AIGC
- Java技術分享:NIO實戰教程!Java
- docker架構和底層技術Docker架構
- iOS底層GCD (技術總結)iOSGC
- 技術分享| 應急指揮排程平臺需要這些技術支撐
- 兩大因素支撐 人民幣升值底氣足
- Redis-技術專區-幫從底層徹底吃透RDB技術原理Redis
- Redis-技術專區-幫從底層徹底吃透AOF技術原理Redis
- 綠盟科技蟬聯“CNNVD優秀技術支撐單位”CNN
- 1區塊鏈底層技術-序區塊鏈
- SQL Server底層架構技術對比SQLServer架構
- 支撐馬蜂窩「雙11」營銷大戰背後的技術架構架構
- 圖撲軟體加入“元宇宙支撐技術與場景驅動創新聯合體”元宇宙
- 【Java技術專題】「原理專題」深入分析Java中finalize方法的作用和底層原理Java
- 一文告訴你java NIO底層用到的那些connect、bind、listen、accept、closeJava
- 從區塊鏈底層技術開發角度闡述LikeLib技術區塊鏈
- 【得物技術】深入理解synchronzied底層原理
- 高新技術的智慧支撐:巧用ai助力企業內部知識庫建設AI
- 綠盟科技榮獲廣州市網路安全技術支撐單位
- 七、真正的技術——CAS操作原理、實現、底層原始碼原始碼
- 《奇異人生:本色》的技術力如今終於能支撐起出色的劇本演繹
- 看懂這篇,才能說了解併發底層技術
- 綠盟科技榮獲“CNNVD 2018年度優秀技術支撐單位”CNN
- 重塑技術引擎 阿里落地全球最大規模雲原生實踐支撐雙11阿里
- Java 與底層作業系統的互動細節Java作業系統
- Java NIO - Channel 與 SelectorJava
- 《三角洲行動》雙端高品質的一體化生產管線與技術支撐【GDC 2024】
- 從ARM”斷供“華為看底層技術的重要性
- 030、實現容器的底層技術(2019-01-25 週五)
- 區塊鏈BAAS底層技術開發,區塊鏈BAAS底層應用開發建設區塊鏈