Rumah  >  Soal Jawab  >  teks badan

java - NIO非阻塞表现在什么地方?

都是NIO是面向缓冲区的非阻塞的io,面向缓冲区倒是好理解,非阻塞到底体现在什么地方?莫不是selector使得NIO是非阻塞的?像下面代码:

    RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");  
    FileChannel inChannel = aFile.getChannel();  
    ByteBuffer buf = ByteBuffer.allocate(48);  
    int bytesRead = inChannel.read(buf);  
    while (bytesRead != -1) {   
        System.out.println("Read " + bytesRead);  
        buf.flip();  
      
        while(buf.hasRemaining()){  
            System.out.print((char) buf.get());  
        }  
        buf.clear();  
        bytesRead = inChannel.read(buf);  
    }  
    aFile.close();  

int bytesRead = inChannel.read(buf); 的时候岂不是也是阻塞的?

高洛峰高洛峰2719 hari yang lalu502

membalas semua(2)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 09:44:57

    Acara baca didaftarkan pada pemilih pelayan Pada masa tertentu, pelanggan menghantar beberapa data ke pelayan, menyekat I/O Pada masa ini, kaedah baca() akan dipanggil untuk membaca data menyekat, dan pelayan NIO akan membaca data dalam pemilih Tambah acara baca. Urutan pemprosesan pelayan akan mengakses pemilih secara tinjauan Jika ia mendapati bahawa acara menarik tiba semasa mengakses pemilih, acara ini akan diproses Jika tiada acara menarik tiba, utas pemprosesan akan disekat sehingga acara menarik tiba.

    Anda boleh lihat di sini untuk butiran:
    Java menyekat IO dan tidak menyekat IO

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:44:57

    Pertama sekali, anda perlu tahu konsep menyekat dan tidak menyekat bermakna utas ini tidak boleh melakukan apa-apa lagi dan hanya boleh menunggu di sini. Tidak menyekat bermakna bahawa utas ini boleh melakukan perkara lain dan tidak perlu menunggu di sini sepanjang masa.
    Sebelum bercakap tentang prinsip tidak menyekat NIO, kita perlu bercakap tentang io tradisional terlebih dahulu. IO tradisional dihantar oleh bait, iaitu, satu bait dihantar pada satu masa. Untuk meningkatkan kecekapan penghantaran data, mod input dan output dengan penimbal diperkenalkan, supaya sejumlah besar bait boleh dihantar setiap kali Walau bagaimanapun, ini akan menyebabkan program menunggu sehingga penimbal baca (tulis). tidak penuh. Strim tidak boleh dibaca (ditulis) sehingga penuh atau ditutup. Ini menyebabkan program menyekat dan mengurangkan kecekapan pelaksanaan program. ,

    balas
    0
  • Batalbalas