## 1. BIO、NIO和AIO的区别?
BIO:Blocking IO,阻塞IO,java.io包下的各种流都是BIO的。BIO的交互方式是同步和阻塞的,一个线程在进行读写操作的时候就得一直阻塞到读写操作完成才能继续运行,这个时候CPU就有大量的空闲时间(IO比较慢),严重影响系统的性能。
NIO:Non-blocking IO,非阻塞IO,JDK 1.4之后引入java.nio包,提供了Channel、Selector、Buffer等新的抽象结构,可以构建多路复用的、同步非阻塞的IO程序,性能更加高。
AIO:异步IO,JDK 1.7之后引入,NIO的升级版本,提供了异步非阻塞的IO操作方式,异步IO是基于事件和回调机制实现的,应用操作后会直接返回,不会阻塞在那里。当事件真正发生的时候就会调用回调函数通知主线程。
BIO面向流通信,NIO面向Channel通信。都可以是双工的,并不是说Stream是单工的。
## 2. NIO的组成?
NIO主要有Channel、Selector、Buffer组成。
Buffer是一个缓冲区,可以在JVM heap内分配,或者在直接内存中分配,在直接内存中分配性能更加高。
Channel表示连接的通道,是双向的,可读可写,不能直接访问数据,只能与Buffer进行交互。
Selector多路复用器,可以使得一个线程单独管理多个Channel,通过事件的机制,可以使得Selector监控多种事件的发生,并当事件发生时交由对应注册的Channel处理。
Pipeline管道,两个线程之间的单线数据连接。
## 3. Netty特点
1. 高性能、异步事件驱动的NIO框架。
2. 避免epoll空轮询造成CPU 100%运行。
3. 使用更加高效的ByteBuf替代JDK的ByteBuffer,同时采用池化技术使得ByteBuf能够重用,充分利用内存。对于ByteBuf的回收不再需要JDK的垃圾回收,而是采用自定义的引用计数的方式进行回收。
4. 提供了对TCP传输的粘包和半包问题的各种解决方案,例如基于分割符(**DelimiterBasedFrameDecoder**)的、基于固定长度的(**FixedLengthFrameDecoder**)和基于预设长度(**LengthFieldBasedFrameDecoder**)的各种类。
## 4. Netty的线程模型?
Netty通过Reactor模型基于多路复用器接收并处理用户请求,其内部实现了两个线程池(其实是EventLoop = 单线程的线程池 + Selector):Boss线程池和Worker线程池。其中Boss线程池中的线程负责处理accept事件,而worker线程池中的线程负责处理read和writer事件,并将对应的事件交由Handler处理。
- 第一章 Java基础
- ThreadLocal
- Java异常体系
- Java集合框架
- List接口及其实现类
- Queue接口及其实现类
- Set接口及其实现类
- Map接口及其实现类
- JDK1.8新特性
- Lambda表达式
- 常用函数式接口
- stream流
- 面试
- 第二章 Java虚拟机
- 第一节、运行时数据区
- 第二节、垃圾回收
- 第三节、类加载机制
- 第四节、类文件与字节码指令
- 第五节、语法糖
- 第六节、运行期优化
- 面试常见问题
- 第三章 并发编程
- 第一节、Java中的线程
- 第二节、Java中的锁
- 第三节、线程池
- 第四节、并发工具类
- AQS
- 第四章 网络编程
- WebSocket协议
- Netty
- Netty入门
- Netty-自定义协议
- 面试题
- IO
- 网络IO模型
- 第五章 操作系统
- IO
- 文件系统的相关概念
- Java几种文件读写方式性能对比
- Socket
- 内存管理
- 进程、线程、协程
- IO模型的演化过程
- 第六章 计算机网络
- 第七章 消息队列
- RabbitMQ
- 第八章 开发框架
- Spring
- Spring事务
- Spring MVC
- Spring Boot
- Mybatis
- Mybatis-Plus
- Shiro
- 第九章 数据库
- Mysql
- Mysql中的索引
- Mysql中的锁
- 面试常见问题
- Mysql中的日志
- InnoDB存储引擎
- 事务
- Redis
- redis的数据类型
- redis数据结构
- Redis主从复制
- 哨兵模式
- 面试题
- Spring Boot整合Lettuce+Redisson实现布隆过滤器
- 集群
- Redis网络IO模型
- 第十章 设计模式
- 设计模式-七大原则
- 设计模式-单例模式
- 设计模式-备忘录模式
- 设计模式-原型模式
- 设计模式-责任链模式
- 设计模式-过滤模式
- 设计模式-观察者模式
- 设计模式-工厂方法模式
- 设计模式-抽象工厂模式
- 设计模式-代理模式
- 第十一章 后端开发常用工具、库
- Docker
- Docker安装Mysql
- 第十二章 中间件
- ZooKeeper