国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JAVA中三種I/O框架——BIO、NIO、AIO

這篇具有很好參考價(jià)值的文章主要介紹了JAVA中三種I/O框架——BIO、NIO、AIO。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、BIO(Blocking I/O)

BIO,同步阻塞IO模型,應(yīng)用程序發(fā)起系統(tǒng)調(diào)用后會一直等待數(shù)據(jù)的請求,直至內(nèi)核從磁盤獲取到數(shù)據(jù)并拷貝到用戶空間;
在一般的場景中,多線程模型下的BIO是成本較低、收益較高的方式。但是,如果在高并發(fā)的場景下,過多的創(chuàng)建線程,會嚴(yán)重占據(jù)系統(tǒng)資源,降低系統(tǒng)對外界響應(yīng)效率。即使使用線程池,只能一定程度上緩解了頻繁調(diào)用IO接口帶來的資源占用。

二、NIO(Non-Blocking/New I/O)

NIO,JAVA中與JDK1.4引入該IO模型,但不要簡單的理解為同步非阻塞,JAVA中的NIO實(shí)際上可以看作IO多路復(fù)用模型,下面簡單介紹下這兩種I/O模型。

2.1 同步非阻塞模型

應(yīng)用程序向內(nèi)核發(fā)起請求后,即使kernel沒有從磁盤中取到數(shù)據(jù),也會返回一個(gè)結(jié)果給用戶,用戶判斷結(jié)果正確性,如果不是需要的數(shù)據(jù),則后續(xù)繼續(xù)發(fā)起請求,即輪詢請求,直至kernel取到數(shù)據(jù)并返回。
采用輪詢方式,會導(dǎo)致系統(tǒng)上下文切換開銷很大,會大幅度推高CPU占用率。

2.2 IO多路復(fù)用模型

Java 中的 NIO ,有一個(gè)非常重要的選擇器 ( Selector ) 的概念,也可以被稱為 多路復(fù)用器。通過它,只需要一個(gè)線程便可以管理多個(gè)客戶端連接。當(dāng)客戶端數(shù)據(jù)到了之后,才會為其服務(wù)。線程首先發(fā)起 select 調(diào)用,詢問內(nèi)核數(shù)據(jù)是否準(zhǔn)備就緒,等內(nèi)核把數(shù)據(jù)準(zhǔn)備好了,用戶線程再發(fā)起 read 調(diào)用。
IO 多路復(fù)用模型,通過減少無效的系統(tǒng)調(diào)用,減少了對 CPU 資源的消耗,解決了同步阻塞I/O和同步非阻塞I/O的問題,是一種非常高效的I/O模型。

三、AIO(Asynchronous I/O)

AIO,異步IO模型,也叫NIO2,JAVA7中引入,異步 IO 是基于事件和回調(diào)機(jī)制實(shí)現(xiàn)的,也就是應(yīng)用操作之后會直接返回,不會堵塞在那里,當(dāng)后臺處理完成,操作系統(tǒng)會通知相應(yīng)的線程進(jìn)行后續(xù)的操作。

四、幾種常見IO模型的對比

JAVA中三種I/O框架——BIO、NIO、AIO

圖片來自【美團(tuán)技術(shù)團(tuán)隊(duì)】https://tech.meituan.com/2016/11/04/nio.html ,其中也詳細(xì)闡述了NIO模型,可前往學(xué)習(xí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-712158.html

到了這里,關(guān)于JAVA中三種I/O框架——BIO、NIO、AIO的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JAVA的BIO、NIO、AIO模式精解(一)

    JAVA的BIO、NIO、AIO模式精解(一)

    在不同系統(tǒng)或進(jìn)程間數(shù)據(jù)交互,或高并發(fā)場景下都選喲網(wǎng)絡(luò)通信。早期是基于性能低下的同步阻塞IO(BIO)實(shí)現(xiàn)。后支持非阻塞IO(NIO)。 前置須知:javsse,java多線程,javaIO,java網(wǎng)絡(luò)模型 目的:局域網(wǎng)內(nèi)通信,多系統(tǒng)間底層消息傳遞機(jī)制,高并發(fā)下大數(shù)據(jù)通信,游戲應(yīng)用。 IO模型

    2023年04月27日
    瀏覽(26)
  • 【Java基礎(chǔ)】BIO/NIO/AIO的詳細(xì)介紹與比較區(qū)分

    【Java基礎(chǔ)】BIO/NIO/AIO的詳細(xì)介紹與比較區(qū)分

    BIO 全稱 Blocking I/O,它是 JDK 1.4 之前的傳統(tǒng)IO模型,是一種同步阻塞的IO,線程發(fā)起 IO 后,一直阻塞,直到緩沖區(qū)數(shù)據(jù)就緒后,在進(jìn)入下一步操作 BIO存在的問題: 無法應(yīng)對高并發(fā)的場景 連接建立后,當(dāng)前線程沒有數(shù)據(jù)可讀就會阻塞,造成資源浪費(fèi) BIO適用場景: 客戶端連接數(shù)

    2024年01月20日
    瀏覽(26)
  • Java NIO(Java Non-Blocking IO:非阻塞式IO)(2)

    Java NIO(Java Non-Blocking IO:非阻塞式IO)(2)

    1.NIO非阻塞網(wǎng)絡(luò)編程相關(guān)的(Selector、SelectionKey、ServerScoketChannel和SocketChannel)關(guān)系梳理圖: 說明: ①.當(dāng)客戶端連接時(shí),會通過服務(wù)器端ServerSocketChannel得到/生成對應(yīng)的SocketChannel; ②.通過register(Selector sel,int ops)方法將SocketChannel注冊到Selector上(一個(gè)Selector上可以注冊多個(gè)SocketChannel); ③

    2024年02月02日
    瀏覽(20)
  • BIO、NIO和AIO

    BIO、NIO和AIO

    目錄 一.引言 何為IO IO的過程 Java的3種網(wǎng)絡(luò)IO模型 阻塞和非阻塞IO IO多路復(fù)用 異步和同步IO 二.BIO 三.NIO 1. 三大組件 Channel Buffer Selector 2.ByteBuffer 2.1ByteBuffer的使用 2.2ByteBuffer 結(jié)構(gòu) ?2.3ByteBuffer的常用方法 分配空間 ? 向 buffer 寫入數(shù)據(jù) 從 buffer 讀取數(shù)據(jù) 字符串與 ByteBuffer 互轉(zhuǎn) 分

    2024年02月12日
    瀏覽(23)
  • BIO、NIO、AIO 的區(qū)別

    Java面試題? 阻塞IO。一個(gè)連接一個(gè)線程,當(dāng)服務(wù)端接受到多個(gè)客戶端的請求時(shí),客戶端有連接請求時(shí)服務(wù)器端就需要啟動一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情會造成不必要的線程開銷 同步非阻塞IO 。一個(gè)線程處理多個(gè)連接。NIO 包含? Channel(通道)、Selector(選擇

    2024年01月20日
    瀏覽(20)
  • BIO、NIO、AIO區(qū)別詳解

    主線程發(fā)起io請求后,需要等待當(dāng)前io操作完成,才能繼續(xù)執(zhí)行。 引入selector、channel、等概念,當(dāng)主線程發(fā)起io請求后,輪詢的查看系統(tǒng)是否準(zhǔn)備好執(zhí)行io操作,沒有準(zhǔn)備好則主線程不會阻塞會繼續(xù)執(zhí)行,準(zhǔn)備好主線程會阻塞等待io操作完成。 主線程發(fā)起io請求后,不會阻塞,

    2024年02月07日
    瀏覽(29)
  • BIO、NIO、AIO 有什么區(qū)別

    在Java中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)都是用于處理I/O(輸入/輸出)操作的不同方式。它們在處理I/O時(shí)具有不同的特點(diǎn)和適用場景。 BIO(Blocking I/O): 阻塞式I/O模型,是Java最傳統(tǒng)的I/O模型。 在BIO中,每個(gè)I/O操作都會阻塞當(dāng)前線程,直到操作完

    2024年02月13日
    瀏覽(22)
  • BIO、NIO、AIO 有什么區(qū)別?

    Java 中的I/O模型主要分為三類:BIO(Blocking I/O)、NIO(New I/O)和AIO(Asynchronous I/O)。它們在處理I/O操作時(shí)有著不同的工作方式和特點(diǎn)。 BIO是傳統(tǒng)的I/O模型,也稱為同步I/O。在BIO中,每個(gè)I/O操作都會阻塞線程,直到數(shù)據(jù)準(zhǔn)備好或者操作完成。這意味著一個(gè)線程只能處理一個(gè)連

    2024年01月16日
    瀏覽(20)
  • 阻塞非阻塞IO(BIO和NIO),IO多路復(fù)用

    阻塞非阻塞IO(BIO和NIO),IO多路復(fù)用

    1.概念 NIO(New Input/Output)和BIO(Blocking Input/Output)是Java中用于處理輸入輸出的兩種不同的模型。 ? BIO 會 阻塞 ,等有了消息,立刻返回,一個(gè)線程處理一個(gè)recv(需要很多線程)。 NIO 有沒有消息,都返回(但程序要自己判斷,返回空就循環(huán)重復(fù));一個(gè)線程可以處理多個(gè)

    2024年02月09日
    瀏覽(21)
  • 【JAVA基礎(chǔ)】- 同步非阻塞模式NIO詳解

    【JAVA基礎(chǔ)】- 同步非阻塞模式NIO詳解

    NIO(Non-Blocking IO)是同步非阻塞方式來處理IO數(shù)據(jù)。服務(wù)器實(shí)現(xiàn)模式為一個(gè)請求一個(gè)線程,即客戶端發(fā)送的鏈接請求都會注冊到選擇器上,選擇器輪詢到連接有IO請求時(shí)才啟動一個(gè)線程進(jìn)行處理。 同步(synchronous) :調(diào)用方式指應(yīng)用(Application),調(diào)用方發(fā)起有一個(gè)功能調(diào)用時(shí),在

    2024年02月13日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包