今天听闻噩耗,袁隆平院士我们称之为袁老去世了享年 91 岁,随之朋友圈也炸锅了,大家都在缅怀,悼念。
不得不说袁老对人类的贡献是伟大的,他是一个高尚的人,纯粹的人,脱离了低级趣味的人。找到了能够为之奋斗一生的事业,并在历史的篇章中留下了属于自己的篇章。
我虽然还在自己家的一亩三分地上挣扎,但是偶尔还是会仰望星空,怎么说呢保持激情,不要锤头丧气就是很好的生活状态。
今天听闻噩耗,袁隆平院士我们称之为袁老去世了享年 91 岁,随之朋友圈也炸锅了,大家都在缅怀,悼念。
不得不说袁老对人类的贡献是伟大的,他是一个高尚的人,纯粹的人,脱离了低级趣味的人。找到了能够为之奋斗一生的事业,并在历史的篇章中留下了属于自己的篇章。
我虽然还在自己家的一亩三分地上挣扎,但是偶尔还是会仰望星空,怎么说呢保持激情,不要锤头丧气就是很好的生活状态。
Netty减少内存使用技巧:
能使用基本类型就不使用包装类型
减少对象本身大小 -> 应该定义成类变量的不要定义为实例变量
Zero-copy
Netty内存池使用
内存池/非内存池的默认选择及切换方式
io.netty.channel.defaultChannelConfig#allocator
内存池实现 io.netty.buffer.pooledDirectByteBuf
对外内存/堆内内存的默认选择及切换方式
对外内存的分配本质
TCP是流式协议,消息无边际
udp像邮寄包裹,虽然是一次运输多个,但是每个包裹都有“界限”,一个一个签收,所以无粘包,拆包问题。
假设我们把解决粘包/半包的问题的常用三种解码器叫一次解码
二次解码:将字节转换成为实际使用的对象
BIO:Thread-Per-Connection
NIO:Reactor
AIO: Proactor
Reactor是一种开发模式,Reactor中文翻译为:反应堆。不是物理上的核反应堆,这儿代表的是:“事件反应”,可以理解为:“来一个事件我(Reactor)就有相应的反应”。Reactor也可以叫Dispatcher模式:
Reactor的数量可以变化:可以是一个Reactor,也可以是多个Reactor
资源池的数量可以变化:可以是单线程,也可以是多线程
注册感兴趣的事件 -> 扫描是否有兴趣的事件发生 -> 事件发生后做出相应的处理
Reactor三种模式:
Reactor单线程模式 | EventLoopGroup eventGroup = new NioEventLoopGroup(1) ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(eventGroup); |
非主从Reactor多线程模式 | EventLoopGroup eventGroup = new NioEventLoopGroup() ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(eventGroup); |
主从Reactor多线程模式 | EventLoopGroup bossGroup = new NioEventLoopGroup() EventLoopGroup workerGroup = new NioEventLoopGroup() ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup); |
Fullstack Developer
Coder