熬夜手绘netty线程模型图 如果还不懂的话,那我...
Netty组件
ServerBootstrap/Bootstrap
不知道大家还熟悉这个么,我们在学习jvm类加载的时候,讲过一个引导类加载器,我们也清楚了引导类加载器是用来干啥的,所以同样,netty的这两个组件也有同样的地位和身份,它们分别是服务端启动配置引导类和客户端启动配置引导类。通过这个引导类 串联netty所有的组件
Channel
Netty 网络通信的组件,能够用于执行网络 I/O 操作。Channel 为用户提供:
1)当前网络连接的通道的状态(例如是否打开?是否已连接?)
2)网络连接的配置参数 (例如接收缓冲区大小)
3)提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保 证在调用结束时所请求的 I/O 操作已完成。
4)调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以 I/O 操作成功、失败或 消时回调通知调用方。我们现在已经见到的有SocketChannel 和ServerSocketChannel,后面还会见到更多。
Selector
netty 是基于selector对象 实现多路复用。关于多路复用实现方式,我们在第一节课也给大家介绍了,这里就不展开讲了。netty通过selector 单个线程就可以实现对多个客户端channel事件的监听。
NioEventLoop
NioEventLoop内部维护了一个线程和一个任务队列,支持异步提交任务。线程启动后会调用loop的run方法,执行异步队列中的非I/O任务和I/O任务。
IO任务
accecpt、connect、read、write
非I/O任务
注册、绑定等
NioEventLoopGroup
内部维护多个NioEventLoop,负责处理多个channel事件,但是一个channel只会交给一个NioEventLoop处理
ChannelHandler
ChannelHandler 处在pipline中,它有两种类型:进站和出站,当服务端收到消息时,所有的进站hanlder将会被执行,当服务端往客户端写消息时,所有的出站handler将会被执行。
ChannelPipline
这就是上面说的pipline,一个pipline中会维护很多handler,保存一个handler list,这里涉及到一个设计模式:职责链设计模式。
手绘模型图
相关文章
- Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
- 同步锁-线程安全问题解决方案「建议收藏」
- Redis的线程模型
- 多线程(一)-两种创建线程的方式+实现Callable接口方式
- 小满寻秘境 · Reactor线程模型
- Java线程知识点总结
- 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
- 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
- 【Windows 逆向】OD 调试器工具 ( 显示模块窗口 | 显示记录窗口 | 显示内存窗口 | 显示线程 | 显示句柄 | 显示 CPU | 多窗口界面 )
- 浏览器层面优化前端性能(1):Chrom组件与进程/线程模型分析
- Redis线程模型的原理分析
- Linux 线程调试:从零开始(linux线程调试)
- Linux下查看线程优先级的方法(linux查看线程优先级)
- 解决Linux系统线程死循环问题(linux线程死循环)
- Linux线程:实现异步处理的高效方案(linux线程异步)
- Redis线程模型解析:多线程实现的奥秘!(redis如何实现多线程)
- Leader-Follower线程模型概述
- 问题Redis锁失败多个线程并发问题深入探究(redis锁失败存在并发)
- Dubbo剖析-线程模型
- Java线程模型缺陷
- JAVA线程用法详解