最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Java I/O 方式

標(biāo)簽:
Java

Java I/O 方式

BIO & NIO & AIO

Java IO 的方式通常分为阻塞的 BIO(Blocking IO)、同步非阻塞的 NIO(New IO) 和异步非阻塞的 AIO(Asynchronous IO)。

JDK1.4 之前只支持 BIO,JDK1.4 以后开始支持 NIO,JDK1.7 开始支持 AIO。

1. BIO

BIO 是同步阻塞的。服务器的模式为一个连接一个线程

客户端有连接请求时,就需要启动一个线程进行处理。如果这个连接不做任何事情,就会造成不必要的开销,可以通过线程池机制改善。

2. NIO

NIO 是同步非阻塞的。服务器模式为一个请求一个线程

NIO 最重要的地方是当一个连接建立后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程即可,当这个线程中的多路复用器进行轮询时,发现连接上有请求的话,才开启一个线程进行处理。

3. AIO

AIO 是异步阻塞的。服务器模式为一个有效请求一个线程

客户端的 IO 请求都是由操作系统完成,再通知服务器去启动线程进行处理。真正的 IO 读写已经由内核完成了。

BIO 和 NIO 的区别

  • 是否阻塞

    BIO 是阻塞的,NIO 是非阻塞的。

    BIO 中一个线程调用 read() / write() 时,该线程被阻塞;

    NIO 中一个线程从 Channel 中读取数据到 Buffer 中,可以继续做别的操作,当数据读取到 Buffer 中后,线程再继续处理数据;一个线程请求写入数据到某个 Channel,但不需要等待完全写入,该线程可进行别的操作。

  • 缓冲区(Buffer)

    BIO 是面向流的,NIO 是面向缓冲区。

    发送给一个通道的所有数据都必须首先放到缓冲区中,同样地,从通道中读取的任何数据都要先读到缓冲区中。也就是说,不会直接对通道进行读写数据,而是要先经过缓冲区

  • 通道(Channel)

    NIO 通过 Chammel 进行读写。

    通道和流的不同之处在于:流只能在一个方向上移动(一个流必须是 InputStream 或者 OutputStream 的子类),而通道是双向的,可以用于读、写或者同事用于读写。

    通道只能和缓冲区交互,因为有缓冲区,通道可以异步读写。

  • 选择器(Selector)

    NIO 中一个线程使用一个选择器 Selector,通过轮询的方式去监听多个 Channel 上的事件。从而让一个线程就可以处理多个事件。

    使用 Selector 的好处:使用更少的线程就可以来处理通道了,相比使用多个线程,减少了线程上下文切换带来的开销

应用场景

  • BIO 适用于连接数目少且固定的架构。这种方式对服务器要求比较高,并发局限于应用中,程序直观简单,容易理解。
  • NIO 适用于连接数目多且连接比较短的架构。这种方式并发局限于应用中,但编程较复杂。
  • AIO 适用于连接数目多且连接比较长的架构。这种方式充分调用服务器的并发操作,但是编程复杂。
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消