国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何理解I/O多路復(fù)用

desdik / 2067人閱讀

摘要:為了講清復(fù)用的是什么,首先得先說(shuō)明一下邏輯流的概念。理解了這個(gè),那么所謂的復(fù)用,指的就是在一個(gè)邏輯流里處理多個(gè)事件如何做到利用多路復(fù)用器,輪詢監(jiān)聽(tīng)各路,如果一旦有事件發(fā)生,那么就去處理,否則程序阻塞。

java nio提供了一套稱為I/O多路復(fù)用的編程范式,那么什么叫做I/O多路復(fù)用呢?
所謂的I/O多路復(fù)用,從字面意思上來(lái)理解,就是:
有多個(gè)I/O操作(或是寫(xiě),或是讀,或是請(qǐng)求),這多個(gè)I/O操作都共用一個(gè)邏輯流
為了講清復(fù)用的是什么,首先得先說(shuō)明一下邏輯流的概念。
邏輯流是什么?這里的邏輯流和操作系統(tǒng)中"線程是進(jìn)程的一個(gè)邏輯流"是一個(gè)意思。
下面的就是一個(gè)邏輯流:

{
int a = 5;
int b a*a;
double c = a/b;
}

下面又是一個(gè)邏輯流:

{
long b = 5;
int c = b+3;
}

如果在一個(gè)進(jìn)程中,如果沒(méi)有線程,那么程序是順序執(zhí)行的,那么所有的代碼都是屬于一個(gè)邏輯流。
比如說(shuō),上面的兩端代碼,如果合在一個(gè)進(jìn)程當(dāng)中,它們一定是這種結(jié)構(gòu):

{
int a = 5;
int b a*a;
double c = a/b;
}
....
{
long b = 5;
int c = b+3;
}

或是

{
long b = 5;
int c = b+3;
}
....
{
int a = 5;
int b a*a;
double c = a/b;
}

也就是說(shuō)它們一定屬于一個(gè)邏輯流(一個(gè)順序結(jié)構(gòu))。
理解了這個(gè),那么所謂的I/O復(fù)用,指的就是在一個(gè)邏輯流里處理多個(gè)I/O事件!!!
如何做到?利用Selector多路復(fù)用器,輪詢監(jiān)聽(tīng)各路I/O,如果一旦有I/O事件發(fā)生,那么就去處理,否則程序阻塞。
來(lái)看一個(gè)程序,加深理解:

package qiuqi.filedownloadtest;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.*;
import java.util.Iterator;

public class FileServer {


    public static void main(String[] args) throws IOException {


        startServer();
    }

    public static void startServer() throws IOException {
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.bind(new InetSocketAddress(9999));
        serverSocketChannel.configureBlocking(false);
        Selector selector = Selector.open();
        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
        while (selector.select() > 0)
        {
            Iterator iterator = selector.selectedKeys().iterator();
            while (iterator.hasNext())
            {
                SelectionKey key = iterator.next();
                iterator.remove();
                if(key.isAcceptable())
                {
                 System.out.println("收到連接這個(gè)I/O事件");
                 catch (IOException e){e.printStackTrace();}

                }
            }
        }

    }
}

這是一個(gè)監(jiān)聽(tīng)網(wǎng)絡(luò)I/O的多路復(fù)用程序,java中只能監(jiān)聽(tīng)網(wǎng)絡(luò)I/O,不能監(jiān)聽(tīng)標(biāo)準(zhǔn)輸入輸出等I/O(不過(guò)這些在linux里都可以)。
我們發(fā)現(xiàn),這個(gè)程序的原理就是開(kāi)啟一個(gè)網(wǎng)絡(luò)I/O類(lèi),ServerSocketChannel,把它注冊(cè)到Selector(選擇器)上,然后選擇器就開(kāi)始
輪詢,直到發(fā)現(xiàn)一個(gè)I/O事件,于是就進(jìn)入第一個(gè)while循環(huán)進(jìn)行處理,否則一直阻塞在select()>0處。
這是一個(gè)極其簡(jiǎn)陋的程序,但是它揭示了多路復(fù)用的真正內(nèi)涵,也就是用一個(gè)邏輯流監(jiān)聽(tīng),處理多個(gè)I/O(不過(guò)處理程序其實(shí)可以開(kāi)啟多線程,也就是指第一個(gè)while循環(huán)里的部分)。
這就是I/O多路復(fù)用!!!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73557.html

相關(guān)文章

  • JAVA NIO 一步步構(gòu)建I/O多路復(fù)用的請(qǐng)求模型

    摘要:為解決這問(wèn)題,我們發(fā)現(xiàn)元兇處在一線程一請(qǐng)求上,如果一個(gè)線程能同時(shí)處理多個(gè)請(qǐng)求,那么在高并發(fā)下性能上會(huì)大大改善。這樣一個(gè)線程可以同時(shí)發(fā)起多個(gè)調(diào)用,并且不需要同步等待數(shù)據(jù)就緒。表示當(dāng)前就緒的事件類(lèi)型。 JAVA NIO 一步步構(gòu)建I/O多路復(fù)用的請(qǐng)求模型 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)保留出處:https://github.com/jasonGeng88/blog 文章一:JAVA ...

    X_AirDu 評(píng)論0 收藏0
  • 《Node.js設(shè)計(jì)模式》歡迎來(lái)到Node.js平臺(tái)

    摘要:事件多路復(fù)用器收集資源的事件并且把這些事件放入隊(duì)列中,直到事件被處理時(shí)都是阻塞狀態(tài)。最后,處理事件多路復(fù)用器返回的每個(gè)事件,此時(shí),與系統(tǒng)資源相關(guān)聯(lián)的事件將被讀并且在整個(gè)操作中都是非阻塞的。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書(shū)筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專欄,之后的博文將在專欄同步:...

    Paul_King 評(píng)論0 收藏0
  • Java IO初探

    Java IO對(duì)大多數(shù)Java程序員來(lái)說(shuō)是熟悉又陌生,熟悉的是感覺(jué)到處都有它的身影,小到簡(jiǎn)單的讀取文件,大到各種服務(wù)器的應(yīng)用,陌生的是Java IO背后到底是一個(gè)怎樣的機(jī)制,今天就讓我們?nèi)チ私庖幌逻@位老朋友吧。本文不講解Java IO如何具體使用,有這方面需求的同學(xué)可以自己查下。 IO模型 要說(shuō)IO,就不得不說(shuō)IO模型,IO模型大家都有所了解,同步異步,阻塞非阻塞什么的,總的來(lái)說(shuō)IO模型可分為以下...

    edgardeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<