最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

支撐Java NIO與NodeJS的底層技術

 更新時間:2016年09月15日 17:12:30   作者:SolidMango  
這篇文章主要為大家詳細介紹了支撐Java NIO與NodeJS的底層技術,具有一定的參考價值,感興趣的小伙伴們可以參考一下

支撐Java NIO 與 NodeJS的底層技術

眾所周知在近幾個版本的Java中增加了一些對Java NIO、NIO2的支持,與此同時NodeJS技術棧中最為人稱道的優(yōu)勢之一就是其高性能IO,那么我們今天要討論的話題就是支撐這些技術的底層技術。

開始之前先要提出的一個問題是:

為什么NodeJS和Java NIO2沒有在更早的時間出現(xiàn)?

答案:個人認為是底層的支撐技術還不成熟。

那么,底層技術指的是什么呢?對的,我想很多人已經(jīng)猜到,是操作系統(tǒng)技術。本文提出的兩個概念Java NIO2和NodeJS無一例外都是用戶態(tài)技術或者說是應用層技術,而這些應用層技術是運行于OS之上的,與此同時隨著操作系統(tǒng)的進步,可以支撐的編程模型也更加的豐富??梢赃@么說,這兩項技術完全是為了應用操作系統(tǒng)進步帶來的紅利而進化出來的技術。一般來說最先享受這種紅利的技術一定是C\C++,因為OS的進步最新提供的大部分是系統(tǒng)調用,而C\C++是最方便應用這些系統(tǒng)調用的,但是同時也是最復雜的。其他平臺為了也獲得同樣的性能,就必須不斷的進化,封裝,使用戶可以用上這些紅利,一旦那個平臺停滯更新,也就是這個平臺沒落的時候了。對用戶來說封裝的越方便,對用戶來說就越是友好,可能使用的人就越多。雖然很多人可以很快的寫出基于這些平臺的代碼,但是往往不得其精髓,因為本質上還是不理解這些技術的動機和原理。下面我們討論的這些技就是這兩項技術相關的底層技術。

不管哪一種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模型的優(yōu)點是編程簡單,也是OS最早支持的IO模型之一,缺點是系統(tǒng)調用阻塞用戶動態(tài)線程執(zhí)行,從而造成CPU時間浪費,IO效率低。

2. nonblocking I/O

如圖所示,這種IO模型的一個改進是IO是非阻塞了,但是需要長輪詢,同樣浪費CPU時鐘周期。

3. I/O multiplexing (select, poll and epoll)

如圖所示,這種IO模型是當今OS提供的最穩(wěn)定的IO模型,大部分主流的應用都是基于此種IO模型構建的,比如NodeJS,但是這些平臺往往在這種模型之上增加一層封裝來直接支持AIO。

4. signal driven I/O (SIGIO)

如圖所示,資料記載這種IO模型由于對比模型3沒有性能優(yōu)勢,同時由于系統(tǒng)支持不穩(wěn)定,很少為設計者采用。

5. asynchronous I/O (the POSIX aio_ functions)

如圖所示,此種IO模型是最完美的AIO,編程模型也最簡單,但是能夠完美支持者個模型的OS很少,網(wǎng)上資料顯示Linux正在做這方面的努力,一旦OS在這個方面上取得進展,編程框架,平臺,編程模型可能還是需要有很大程度的簡化。

雖然這種模型很少有OS的支持,但是并不是說現(xiàn)在就沒有這種AIO模型,很多框架做了這方面的工作,在用戶態(tài)模擬了AIO,使用戶可以更多的關注業(yè)務邏輯代碼。

6. 同步異步,阻塞和非阻塞

同步和異步是針對應用程序和內核的交互而言的。一直等到數(shù)據(jù)讀完再返回的是同步,直接返回的是異步。阻塞和非阻塞是對進程、線程而言的,阻塞方式下讀取或者寫入線程一直等待,而非阻塞方式下,讀取或者寫入線程立即返回一個狀態(tài)值。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 簡單聊聊Java中驗證碼功能的實現(xiàn)

    簡單聊聊Java中驗證碼功能的實現(xiàn)

    相信大家都經(jīng)常接觸到驗證碼的,畢竟平時上網(wǎng)也能遇到各種驗證碼,需要我們輸入驗證碼進行驗證我們是人類,本篇文章就從這幾個方面出發(fā)說說驗證碼,廢話不多說,下面開始正文
    2023-06-06
  • springboot中使用過濾器,jsoup過濾XSS腳本詳解

    springboot中使用過濾器,jsoup過濾XSS腳本詳解

    這篇文章主要介紹了springboot中使用過濾器,jsoup過濾XSS腳本詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中easypoi的使用之導入校驗

    Java中easypoi的使用之導入校驗

    因工作需要,使用easypoi導入表格,并進行校驗,將表格中有問題的地方,給出提示信息,以表格形式返回,下面這篇文章主要給大家介紹了關于Java中easypoi的使用之導入校驗的相關資料,需要的朋友可以參考下
    2023-03-03
  • spring使用OXM進行對象XML映射解析

    spring使用OXM進行對象XML映射解析

    這篇文章主要介紹了spring使用OXM進行對象XML映射解析,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Java高性能緩存框架之Caffeine詳解

    Java高性能緩存框架之Caffeine詳解

    這篇文章主要介紹了Java高性能緩存框架之Caffeine詳解,Caffeine是一個基于Java8的高性能緩存框架,號稱趨于完美,Caffeine受啟發(fā)于Guava?Cache的API,使用API和Guava是一致的,需要的朋友可以參考下
    2023-12-12
  • SpringBoot中的@PreAuthorize注解詳解

    SpringBoot中的@PreAuthorize注解詳解

    這篇文章主要介紹了SpringBoot中的@PreAuthorize注解詳解,@PreAuthorize注解會在方法執(zhí)行前進行權限驗證,支持Spring?EL表達式,它是基于方法注解的權限解決方案,需要的朋友可以參考下
    2023-09-09
  • Spring指定bean在哪個應用加載(示例詳解)

    Spring指定bean在哪個應用加載(示例詳解)

    本文通過實例代碼介紹了Spring指定bean在哪個應用加載,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-08-08
  • mybatis中使用大于小于等于的正確方法

    mybatis中使用大于小于等于的正確方法

    在mybatis中sql是寫在xml映射文件中的,如果sql中有一些特殊字符的話,在解析xml文件的時候就會被轉義,下面我們就一起來看一下大于小于等于是怎么轉義的
    2021-04-04
  • jpanel設置背景圖片的二個小例子

    jpanel設置背景圖片的二個小例子

    這篇文章主要介紹了jpanel設置背景圖片的二個小例子,實現(xiàn)了動態(tài)加載圖片做背景的方法,需要的朋友可以參考下
    2014-03-03
  • java(jdk)環(huán)境變量配置(XP、win7、win8)圖文教程詳解

    java(jdk)環(huán)境變量配置(XP、win7、win8)圖文教程詳解

    對于初學java的同學來說,第一件事不是寫hello world,而是搭建好java開發(fā)環(huán)境,下載jdk,安裝,配置環(huán)境變量。這些操作在xp、win7、win8不同的操作系統(tǒng)里面配置不太一樣,下面通過本文給大家介紹如何在上面不同操作系統(tǒng)下配置
    2017-03-03

最新評論

丰城市| 炉霍县| 临夏县| 犍为县| 星子县| 青冈县| 如东县| 武宣县| 湘阴县| 泰顺县| 墨脱县| 阳朔县| 望城县| 河津市| 安宁市| 尤溪县| 徐汇区| 五家渠市| 民乐县| 新泰市| 娄烦县| 玛多县| 卓资县| 海阳市| 日喀则市| 依安县| 咸宁市| 临桂县| 萝北县| 泸西县| 田阳县| 揭西县| 丹棱县| 新巴尔虎右旗| 呼图壁县| 内江市| 抚顺市| 和平区| 西充县| 镇沅| 合作市|