代码拉取完成,页面将自动刷新
同步操作将从 z17097201102/netty_io_udp_tcp_websocket 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Netty的零拷⻉主要体现在三个⽅⾯:
Bytebuf 使⽤的是⽤池化的Direct Buffer类型使⽤的堆外内存,不需要进⾏字节缓冲区的⼆次拷
⻉,如果使⽤堆内存, JVM会先拷⻉到堆内,再写⼊Socket,就多了⼀次拷⻉。
CompositeByteBuf将多个ByteBuf封装成⼀个ByteBuf,在添加ByteBuf时不需要进程拷⻉。
Netty的⽂件传输类DefaultFileRegion的transferTo⽅法将⽂件发送到⽬标channel中,不需要进
⾏循环拷⻉,提升了性能。
2使⽤EventLoop的任务调度
channel.eventLoop().execute(new Runnable() {
@Override
public void run() {
channel.writeAndFlush(data)
}
});
在writeAndFlush的底层,如果没有通过eventLoop执⾏的话,就会重新启动新的线程执⾏。
3:减少pipeline的调用长度
// BAD (most of the times)
ctx.channel().writeAndFlush(msg);
// GOOD
ctx.writeAndFlush(msg);
4:减少ChannelHandler的创建
如果channelhandler是⽆状态的(即不需要保存任何状态参数),那么使⽤
@ChannelHandler.Sharable注解,并在
bootstrap时只创建⼀个实例,减少GC。否则每次连接都会new出handler对象。
5:一些配置参数的设置
ServerBootstrap启动时,通常bossGroup只需要设置为1即可,因为ServerSocketChannel在初始化阶
段,只会注册到某⼀个eventLoop上,⽽这个eventLoop只会有⼀个线程在运⾏,所以没有必要设置为
多线程。⽽ IO 线程,为了充分利⽤ CPU,同时考虑减少线上下⽂切换的开销,通常设置为 CPU 核数的
两倍,这也是 Netty 提供的默认值。
在对于响应时间有⾼要求的场景,使⽤
serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true)
和.option(ChannelOption.TCP_NODELAY, true)来禁⽤nagle算法,不等待,⽴即发送
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。