![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
卓立苍穹
要保持乐观,积极,要乐于帮助别人,助人及助己
展开
-
Netty实例
客户端可以主动的给服务端发送消息,服务端收到消息之后将消息打印到控制台上,然后将消息返回复给客户端 public class NettyClient { public static void main(String[] args) { EventLoopGroup worker = new NioEventLoopGroup(); Bootstrap bo...原创 2019-06-13 10:32:11 · 306 阅读 · 0 评论 -
Netty源码分析 - Netty中如何解决select空轮询导致cpu使用率升至100%的bug
1、 BUG出现的原因: 若Selector的轮询结果为空,也没有wakeup或新消息处理,则发生N多次空轮询,使得CPU使用率100% 2、Netty中的解决思路: 对Selector()方法中的阻塞定时 select(timeMIllinois)操作的 次数进行统计,每完成一次select操作进行一次计数,若在循环周期内 发生N次空轮询,如果N值大于BUG阈值(默认为512),就进行空轮询BU...原创 2019-06-14 00:50:05 · 3367 阅读 · 2 评论 -
Netty源码解读 - 服务端channel的创建和初始化:
1、服务端channel的创建和初始化流程 bind() 服务端绑定端口号 ——> initAndRegister() 初始化并且注册 ———— > newChannel() 创建服务端Channel ———— > init()初始化服务端channel 从bind进入: ChannelFuture sync = bootstrap.bind(port).sy...原创 2019-06-14 01:09:03 · 229 阅读 · 0 评论 -
Netty 中的缓冲区 ByteBuf结构和常用API
ByteBuf有两个指针,一个对应读操作一个对应写操作。当你向ByteBuf里写入数据的时候写指针的索引就会增加,同时读指针的索引没有变化。读指针索引和写指针索引分别代表了消息的开始和结束。所以ByteBuf不需要切换读写模式。 本文主要知识点: 1、ByteBuf的结构 2、ByteBuf的常用方法 3、ByteBuf的分类 4、ByteBuf的创建 创建和管理ByteBuf实例的多种方式:按需...原创 2019-06-14 01:29:29 · 1164 阅读 · 1 评论 -
Netty中如何保证异步串行无锁化
在外部线程调用EventLoop或者channel的一些方法的时候,都会调用InEventLoop()方法检查当前线程是否是NioEventloop中的线程,如如果是外部线程,就会将外部线程的的所有操作封装成为一个task,放进EventLoop的MPSCQ里面,然后在NioEventLoop执行过程的第三个部分,这些task会被依次执行样式 以下从服务端bind()方法进入,进入dobind0(...原创 2019-06-14 11:10:15 · 1849 阅读 · 0 评论