美文网首页
JAVA-每日一面 2022-01-26

JAVA-每日一面 2022-01-26

作者: YangEvol | 来源:发表于2022-01-26 17:13 被阅读0次

简述一下bio与nio的区别

1、bio同步阻塞io:在此种⽅式下,⽤户进程在发起⼀个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,⽤户进程才能运⾏。JAVA传统的IO模型属于此种⽅式!

2、nio同步⾮阻塞式I/O;java NIO采⽤了双向通道进⾏数据传输,在通道上我们可以注册我们感兴趣的事件:连接事件、读写事件;
NIO主要有三⼤核⼼部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进⾏操作,⽽NIO基于Channel和
Buffer(缓冲区)进⾏操作,数据总是从通道读取到缓冲区中,或者从缓冲区写⼊到通道中。Selector(选择区)⽤于监听多个通道的事件
(⽐如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。

  1. BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写⼊必须阻塞在⼀个线程内等待其完成。这⾥使⽤那个经典的烧开⽔例⼦,
    这⾥假设⼀个烧开⽔的场景,有⼀排⽔壶在烧开⽔,BIO的⼯作模式就是, 叫⼀个线程停留在⼀个⽔壶那,直到这个⽔壶烧开,才去
    处理下⼀个⽔壶。但是实际上线程在等待⽔壶烧开的时间段什么都没有做。

  2. NIO (New I/O):同时⽀持阻塞与⾮阻塞模式,但这⾥我们以其同步⾮阻塞I/O模式来说明,那么什么叫做同步⾮阻塞?如果还拿烧开⽔来说,NIO的做法是叫⼀个线程不断的轮询每个⽔壶的状态,看看是否有⽔壶的状态发⽣了改变,从⽽进⾏下⼀步的操作。

  3. AIO ( Asynchronous I/O):异步⾮阻塞I/O模型。异步⾮阻塞与同步⾮阻塞的区别在哪⾥?异步⾮阻塞⽆需⼀个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。对应到烧开⽔中就是,为每个⽔壶上⾯装了⼀个开关,⽔烧开之后,⽔壶会⾃动通知我⽔烧开了。

相关文章

  • JAVA-每日一面 2022-01-26

    简述一下bio与nio的区别 1、bio同步阻塞io:在此种⽅式下,⽤户进程在发起⼀个IO操作以后,必须等待IO操...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • Java-浅析Object类

    Java-浅析Object类 ++2016.7.19++byside @Java-浅析Object类 ======...

  • JAVA-每日一面 2022-02-17

    mysql调优 1、选择最合适的字段属性:类型、⻓度、是否允许NULL等;尽量把字段设为not null,⼀⾯查询...

  • JAVA-每日一面 2022-02-14

    接⼝限流⽅案 限制 总并发数(⽐如 数据库连接池、线程池) 限制 瞬时并发数(如 nginx 的 limit_co...

  • JAVA-每日一面 2022-01-18

    Spring IOC 如何实现 Spring 中的 org.springframework.beans 包和 or...

  • JAVA-每日一面 2022-01-16

    问BeanFactory 和 ApplicationContext 有什么区别 答 BeanFactory 可以理...

  • JAVA-每日一面 2022-01-08

    问:请简述一下cms垃圾回收机制答:1、概念:CMS全称 Concurrent Mark Sweep,是一款并发的...

  • JAVA-每日一面 2022-01-10

    问:mapreduce原理答:1、简介:mapreduce源自google的一篇文章,将海量数据处理的过程拆分为m...

  • JAVA-每日一面 2022-01-14

    问:高并发系统如何做性能优化?如何防止库存超卖?答: 高并发系统性能优化:优化程序,优化服务配置,优化系统配置1....

网友评论

      本文标题:JAVA-每日一面 2022-01-26

      本文链接:https://www.haomeiwen.com/subject/ljbnhrtx.html