Selector BUG出现的原因
若Selector的轮询结果为空,也没有wakeup或新消息处理,则发生空轮询,CPU使用率100%,
Netty的解决办法
对Selector的select操作周期进行统计,每完成一次空的select操作进行一次计数,
若在某个周期内连续发生N(512)次空轮询,则触发了epoll死循环bug。
重建Selector,判断是否是其他线程发起的重建请求,若不是则将原SocketChannel从旧的Selector上去除注册,重新注册到新的Selector上,并将原来的Selector关闭。
RPC通讯的主题:IO模型 数据协议 线程模型