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

NIO之非阻塞模式

這篇具有很好參考價(jià)值的文章主要介紹了NIO之非阻塞模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? NIO支持非阻塞模式,以網(wǎng)絡(luò)連接和網(wǎng)絡(luò)數(shù)據(jù)傳輸為例。如果使用阻塞模式,ServerSocketChannel在調(diào)用accept等待客戶端建立連接是阻塞的,沒有連接就一直阻塞。從Channel中讀取客戶端傳送的數(shù)據(jù)也是阻塞的,沒有數(shù)據(jù)就一直阻塞。當(dāng)我們開啟非阻塞模式,等待連接建立時(shí)沒有連接就返回null,等到數(shù)據(jù)時(shí)沒有數(shù)據(jù)就返回0。

// 使用 nio 來理解非阻塞模式, 單線程
// 0. ByteBuffer
ByteBuffer buffer = ByteBuffer.allocate(16);
// 1. 創(chuàng)建了服務(wù)器
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false); // 非阻塞模式
// 2. 綁定監(jiān)聽端口
ssc.bind(new InetSocketAddress(8080));
// 3. 連接集合
List<SocketChannel> channels = new ArrayList<>();
while (true) {
    // 4. accept 建立與客戶端連接, SocketChannel 用來與客戶端之間通信
    SocketChannel sc = ssc.accept(); // 非阻塞,線程還會(huì)繼續(xù)運(yùn)行,如果沒有連接建立,但sc是null
    if (sc != null) {
        log.debug("connected... {}", sc);
        sc.configureBlocking(false); // 非阻塞模式
        channels.add(sc);
    }
    for (SocketChannel channel : channels) {
        // 5. 接收客戶端發(fā)送的數(shù)據(jù)
        int read = channel.read(buffer);// 非阻塞,線程仍然會(huì)繼續(xù)運(yùn)行,如果沒有讀到數(shù)據(jù),read 返回 0
        if (read > 0) {
            buffer.flip();
            debugRead(buffer);
            buffer.clear();
            log.debug("after read...{}", channel);
        }
    }
}

? ? ? ? 以上雖然是非阻塞模式,但是如果一直沒有連接或者數(shù)據(jù)接收,會(huì)導(dǎo)致CPU空轉(zhuǎn),造成資源浪費(fèi)。為此,最佳方式是使用Selector,其支持單線程綁定多個(gè)channel監(jiān)聽對(duì)應(yīng)類型的事件,在防止完全非阻塞模式CPU空轉(zhuǎn)的同時(shí)也避免了傳統(tǒng)的完全阻塞模式下阻塞等待影響其他需要連接或有數(shù)據(jù)接收的channel的正常工作,這也就是NIO Selector的作用,后續(xù)會(huì)詳細(xì)介紹。文章來源地址http://www.zghlxwxcb.cn/news/detail-858850.html

到了這里,關(guān)于NIO之非阻塞模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • NIO 非阻塞式IO

    NIO 非阻塞式IO

    Java NIO 基本介紹 Java NIO 全稱 Java non-blocking IO ,是指 JDK 提供的新 API 。從 JDK1.4 開始, Java 提供了一系列改進(jìn)的輸入/輸出的新特性,被統(tǒng)稱為 NIO (即 NewIO ),是同步非阻塞的。 NIO 相關(guān)類都被放在 java.nio 包及子包下,并且對(duì)原 java.io 包中的很多類進(jìn)行改寫。 NIO 有三大核心

    2024年02月13日
    瀏覽(44)
  • 阻塞非阻塞IO(BIO和NIO),IO多路復(fù)用

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

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

    2024年02月09日
    瀏覽(21)
  • 9.NIO非阻塞式網(wǎng)絡(luò)通信入門

    9.NIO非阻塞式網(wǎng)絡(luò)通信入門

    一個(gè) I/O 線程可以并發(fā)處理 N 個(gè)客戶端連接和讀寫操作,這從根本上解決了傳統(tǒng)同步阻塞 I/O 一連接一線程模型。架構(gòu)的性能、彈性伸縮能力和可靠性都得到了極大的提升。 1、當(dāng)客戶端連接服務(wù)端時(shí),服務(wù)端會(huì)通過 ServerSocketChannel 得到 SocketChannel:獲取通道 java ServerSocketChanne

    2024年02月15日
    瀏覽(15)
  • 深入理解網(wǎng)絡(luò)非阻塞 I/O:NIO

    深入理解網(wǎng)絡(luò)非阻塞 I/O:NIO

    ?? 嗨,您好 ?? 我是 vnjohn,在互聯(lián)網(wǎng)企業(yè)擔(dān)任 Java 開發(fā),CSDN 優(yōu)質(zhì)創(chuàng)作者 ?? 推薦專欄:Spring、MySQL、Nacos、Java,后續(xù)其他專欄會(huì)持續(xù)優(yōu)化更新迭代 ??文章所在專欄:網(wǎng)絡(luò) I/O ?? 我當(dāng)前正在學(xué)習(xí)微服務(wù)領(lǐng)域、云原生領(lǐng)域、消息中間件等架構(gòu)、原理知識(shí) ?? 向我詢問任何您想

    2024年02月05日
    瀏覽(18)
  • 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日
    瀏覽(23)
  • Java-NIO篇章(4)——Reactor反應(yīng)器模式

    Java-NIO篇章(4)——Reactor反應(yīng)器模式

    前面已經(jīng)講過了Java-NIO中的三大核心組件Selector、Channel、Buffer,現(xiàn)在組件我們回了,但是如何實(shí)現(xiàn)一個(gè)超級(jí)高并發(fā)的socket網(wǎng)絡(luò)通信程序呢?假設(shè),我們只有一臺(tái)內(nèi)存為32G的Intel-i710八核的機(jī)器,如何實(shí)現(xiàn)同時(shí)2萬個(gè)客戶端高并發(fā)非阻塞通信?可能你會(huì)說不可能實(shí)現(xiàn),答案是2萬的

    2024年01月22日
    瀏覽(30)
  • 為什么Tomcat的NIO在讀取body時(shí)要模擬阻塞?

    文章首發(fā)地址 Tomcat的NIO完全可以以非阻塞方式處理IO,為什么在讀取body部分時(shí)要模擬阻塞呢?在Tomcat的NIO讀取HTTP請(qǐng)求時(shí),為了保證請(qǐng)求的正確性和可靠性,需要模擬阻塞模式,這是因?yàn)閟ervlet規(guī)范里定義了ServletInputStream在讀數(shù)據(jù)時(shí)是阻塞模式。 ServletInputStream在讀取數(shù)據(jù)時(shí)是阻

    2024年02月13日
    瀏覽(19)
  • Java 網(wǎng)絡(luò)編程 —— 創(chuàng)建非阻塞的 HTTP 服務(wù)器

    HTTP 客戶程序必須先發(fā)出一個(gè) HTTP 請(qǐng)求,然后才能接收到來自 HTTP 服器的響應(yīng),瀏覽器就是最常見的 HTTP 客戶程序。HTTP 客戶程序和 HTTP 服務(wù)器分別由不同的軟件開發(fā)商提供,它們都可以用任意的編程語言編寫。HTTP 嚴(yán)格規(guī)定了 HTTP 請(qǐng)求和 HTTP 響應(yīng)的數(shù)據(jù)格式,只要 HTTP 服務(wù)器

    2024年02月06日
    瀏覽(26)
  • Java 網(wǎng)絡(luò)編程 —— 實(shí)現(xiàn)非阻塞式的服務(wù)器

    當(dāng) ServerSocketChannel 與 SockelChannel 采用默認(rèn)的阻塞模式時(shí),為了同時(shí)處理多個(gè)客戶的連接,必須使用多線程 在非阻塞模式下, EchoServer 只需要啟動(dòng)一個(gè)主線程,就能同時(shí)處理三件事: 接收客戶的連接 接收客戶發(fā)送的數(shù)據(jù) 向客戶發(fā)回響應(yīng)數(shù)據(jù) EchoServer 委托 Selector 來負(fù)責(zé)監(jiān)控接

    2024年02月05日
    瀏覽(24)
  • Java NIO 圖解 Netty 服務(wù)端啟動(dòng)的過程

    了解整體Netty常用的核心組件后,并且對(duì)比了傳統(tǒng)IO模式。在對(duì)比過程中,找到了傳統(tǒng)IO對(duì)應(yīng)Netty中是如何實(shí)現(xiàn)的。最后我們了解到在netty中常用的那些組件。 本文在了解下這些核心組件的前提下,進(jìn)一步了解組件如何在整個(gè)服務(wù)器啟動(dòng)過程如何被創(chuàng)建,如何組件之間配合來使

    2024年02月11日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包