IO模型:
BIO 是java中的阻塞IO
NIO 是非阻塞IO 主要有channel select 和 buffer 三个
最典型的就是在客户端发送服务端的时候
AIO
简单的说一下BIO NIO的区别嘛 包括网络编程方面
BIO 阻塞IO NIO 非阻塞IO
用的方法 channel 来实现非阻塞
用select 来基于事件完成多路复用选择
byffer 实现数据接收
这也是最重要的三个组件
NIO epoll模型
什么是epoll? man 查询linux 系统函数
linux 文件描述相关方法
epoll create 创建文件描述符方法
epoll ctl
epoll wait
通过中断收集事件数据
Redis 单线程多路复用
单线程顺序执行 没有并发
内存读取 速度快
Netty 线程模型 Reactor 模型 观察者设计模型类似
netty线程模型就是Reactor 基于NIO
实质上就是一个线程管理接收注册各类事件,另外N个线程处理这些线程的业务逻辑
当然 这个一个类似主从,当然 主也可以是多线程,主要是基于workEventloop的数量配置来决定的 启动方法的时候 netty需要写的那个
如果没有基于事件 那么久需要对所有的客户端遍历 其实就是epoll的原理
NIO jdk1.4之前用的是 select/poll 遍历操作
1.5之后用epoll 基于事件
Netty 三层网络架构:
Reactor 通信调度层
单reactor单线程
感知事件如果多了 会导致效率低下
实际业务处理交给线程池 单R多T
多reactorss sub可以多个
a、基于IO多路复用模型:多个连接共用一个阻塞对象。应用程序只需要在一个阻塞对象上等待,无需阻塞所有对象
b、基于线程池复用线程资源:不再为每个连接创建线程,将连接完成后的业务处理任务分配给线程池处理
职责链 PipeLine、 链表
业务逻辑处理层
handler
Reactor 通信调度层 可复用io
Netty 的线程调度模型
序列化方式 :使用proto 序列化
链路有效性检测
流量整形
优雅停机策略
Netty 对 SSL/TLS 的支持
Netty 的源码质量极高,推荐对部分的核心代码进行阅读:
Netty 的 Buffer
Netty 的 Reactor
Netty 的 Pipeline
Netty 的 Handler 综述
Netty 的 ChannelHandler
Netty 的 LoggingHandler
Netty 的 TimeoutHandler
Netty 的 CodecHandler
Netty 的 MessageToByteEncoder