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

Java中的BIO、NIO與AIO

這篇具有很好參考價值的文章主要介紹了Java中的BIO、NIO與AIO。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.概述

??I/O 模型簡單的理解:就是用什么樣的通道進(jìn)行數(shù)據(jù)的發(fā)送和接收,很大程度上決定了程序通信的性能。Java 共支持 3 種網(wǎng)絡(luò)編程模型 I/O 模式:BIO、NIO、AIO。

2.Java BIO

??Java BIO(Blocking I/O):是傳統(tǒng)的java io 編程,其相關(guān)的類和接口在 java.io。同步并阻塞(傳統(tǒng)阻塞型),服務(wù)器實現(xiàn)模式為一個連接一個線程,即客戶端有連接請求時,服務(wù)器端就需要啟動一個線程進(jìn)行處理,如果這個連接不做任何事情會造成不必要的線程開銷。

Java中的BIO、NIO與AIO,Java,java,nio,服務(wù)器

BIO 編程流程的梳理

  1. 服務(wù)器端啟動一個 ServerSocket。
  2. 客戶端啟動 Socket 對服務(wù)器進(jìn)行通信,默認(rèn)情況下服務(wù)器端需要對每個客戶建立一個線程與之通訊。
  3. 客戶端發(fā)出請求后,先咨詢服務(wù)器是否有線程響應(yīng),如果沒有則會等待,或者被拒絕。
  4. 如果有響應(yīng),客戶端線程會等待請求結(jié)束后,在繼續(xù)執(zhí)行。

Java BIO 存在的問題:

  • 每個請求都需要創(chuàng)建獨立的線程,與對應(yīng)的客戶端進(jìn)行數(shù)據(jù)Read,業(yè)務(wù)處理,數(shù)據(jù) Write 。
  • 當(dāng)并發(fā)數(shù)較大時,需要創(chuàng)建大量線程來處理連接,系統(tǒng)資源占用較大。
  • 連接建立后,如果當(dāng)前線程暫時沒有數(shù)據(jù)可讀,則線程就阻塞在 Read 操作上,造成線程資源浪費。

BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中。

3.Java NIO

??Java NIO(java non-blocking IO):同步非阻塞,服務(wù)器實現(xiàn)模式為一個線程處理多個請求(連接),即客戶端發(fā)送的連接請求都會注冊到多路復(fù)用器上,多路復(fù)用器輪詢到連接有 I/O 請求就進(jìn)行處理 。NIO 有三大核心部分: Channel(通道)、Buffer(緩沖區(qū))、Selector(選擇器) 。NIO面向緩沖區(qū),或者面向塊編程的。數(shù)據(jù)讀取到一個它稍后處理的緩沖區(qū),需要時可在緩沖區(qū)中前后移動,這就增加了處理過程中的靈活性,使用它可以提供非阻塞式的高伸縮性網(wǎng)絡(luò)。

Java中的BIO、NIO與AIO,Java,java,nio,服務(wù)器
對于NIO的理解:

  • 每個 Channel 對應(yīng)一個 Buffer,底層是一個數(shù)組;
  • Selector 對應(yīng)一個線程,一個線程對應(yīng)多個channel,根據(jù)不同的事件,在不同的通道上切換;
  • 程序切換到哪個channel 是有事件決定的(accept/read/write);
  • 數(shù)據(jù)的讀取寫入是通過Buffer, 這個和BIO , BIO 中要么是輸入流,或者是輸出流, 不能雙向,但是NIO的Buffer 是可以讀也可以寫, 需要 flip 方法切換

4. Java AIO

??JDK7 引入了 AsynchronousI/O,即 AIO。在進(jìn)行 I/O 編程中,常用到兩種模式:Reactor Proactor。JavaNIO 就是 Reactor,當(dāng)有事件觸發(fā)時,服務(wù)器端得到通知,進(jìn)行相應(yīng)的處理。Java AIO(NIO.2):異步非阻塞,AIO 引入異步通道的概念,采用了 Proactor 模式,簡化了程序編寫,有效的請求才啟動線程,它的特點是先由操作系統(tǒng)完成后才通知服務(wù)端程序啟動線程去處理,一般適用于連接數(shù)較多且連接時間較長的應(yīng)用。

5. BIO VS NIO VS AIO

編程模型 BIO NIO AIO
IO模型 同步阻塞 同步非阻塞(多路復(fù)用) 異步非阻塞
編程難度 簡單 復(fù)雜 復(fù)雜
可靠性
吞吐量

舉例說明文章來源地址http://www.zghlxwxcb.cn/news/detail-858863.html

  1. 同步阻塞:到理發(fā)店理發(fā),就一直等理發(fā)師,直到輪到自己理發(fā)。
  2. 同步非阻塞:到理發(fā)店理發(fā),發(fā)現(xiàn)前面有其它人理發(fā),給理發(fā)師說下,先干其他事情,一會過來看是否輪到自己.
    理發(fā)店理發(fā),發(fā)現(xiàn)前面有其它人理發(fā),給理發(fā)師說下,先干其他事情,一會過來看是否輪到自己.
  3. 異步非阻塞:給理發(fā)師打電話,讓理發(fā)師上門服務(wù),自己干其它事情,理發(fā)師自己來家給你理發(fā)

到了這里,關(guān)于Java中的BIO、NIO與AIO的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【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ù)可讀就會阻塞,造成資源浪費 BIO適用場景: 客戶端連接數(shù)

    2024年01月20日
    瀏覽(26)
  • JAVA中三種I/O框架——BIO、NIO、AIO

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

    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)對外

    2024年02月08日
    瀏覽(21)
  • Java分別用BIO、NIO實現(xiàn)簡單的客戶端服務(wù)器通信

    Java分別用BIO、NIO實現(xiàn)簡單的客戶端服務(wù)器通信

    前言: Java I/O模型發(fā)展以及Netty網(wǎng)絡(luò)模型的設(shè)計思想 Java BIO是Java平臺上的BIO(Blocking I/O)模型,是Java中用于實現(xiàn)同步阻塞網(wǎng)絡(luò)編程的一種方式。 在Java中,使用BIO模型需要通過Socket和ServerSocket類來完成網(wǎng)絡(luò)連接和數(shù)據(jù)傳輸,但是由于BIO是同步阻塞的,所以會導(dǎo)致線程阻塞和資

    2024年02月09日
    瀏覽(23)
  • 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日
    瀏覽(24)
  • BIO、NIO、AIO 的區(qū)別

    Java面試題? 阻塞IO。一個連接一個線程,當(dāng)服務(wù)端接受到多個客戶端的請求時,客戶端有連接請求時服務(wù)器端就需要啟動一個線程進(jìn)行處理,如果這個連接不做任何事情會造成不必要的線程開銷 同步非阻塞IO 。一個線程處理多個連接。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)
  • 代碼分析Java中的BIO與NIO

    代碼分析Java中的BIO與NIO

    OS:Win10(需要開啟telnet服務(wù),或使用第三方遠(yuǎn)程工具) Java版本:8 BIO(Block IO),即同步阻塞IO,特點為當(dāng)客戶端發(fā)起請求后,在服務(wù)端未處理完該請求之前,客戶端將一直等待服務(wù)端的響應(yīng)。而服務(wù)端在此時也專注于該請求的處理,無法處理其它客戶端的請求。 在IDEA運行上述

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

    在Java中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)都是用于處理I/O(輸入/輸出)操作的不同方式。它們在處理I/O時具有不同的特點和適用場景。 BIO(Blocking I/O): 阻塞式I/O模型,是Java最傳統(tǒng)的I/O模型。 在BIO中,每個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操作時有著不同的工作方式和特點。 BIO是傳統(tǒng)的I/O模型,也稱為同步I/O。在BIO中,每個I/O操作都會阻塞線程,直到數(shù)據(jù)準(zhǔn)備好或者操作完成。這意味著一個線程只能處理一個連

    2024年01月16日
    瀏覽(21)
  • BIO、NIO、IO多路復(fù)用模型詳細(xì)介紹&Java NIO 網(wǎng)絡(luò)編程

    BIO、NIO、IO多路復(fù)用模型詳細(xì)介紹&Java NIO 網(wǎng)絡(luò)編程

    上文介紹了網(wǎng)絡(luò)編程的基礎(chǔ)知識,并基于 Java 編寫了 BIO 的網(wǎng)絡(luò)編程。我們知道 BIO 模型是存在巨大問題的,比如 C10K 問題,其本質(zhì)就是因其阻塞原因,導(dǎo)致如果想要承受更多的請求就必須有足夠多的線程,但是足夠多的線程會帶來內(nèi)存占用問題、CPU上下文切換帶來的性能問題

    2024年02月14日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包