[技术总结]netty入门

背景

最近遇到了一些问题了netty相关,又重新看了下netty相关的知识

之前疑问

1、NiO, IO多路复用, Netty, Epoll, Selector, Reactor模型等的关系是什么?

Netty (主从 Reactors 多线程模型的落地)

netty的核心实现:NIO(Non-block I/O) + IO多路复用

操作系统底层提供对IO多路复用提供的支持:Epoll Selector Poll

新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析_6.jpg

可看

08 网络通信优化之IO模型:如何解决高并发下IO瓶颈?
08 网络通信优化之IO模型:如何解决高并发下IO瓶颈?
11 答疑课堂:深入了解NIO的优化实现原理
11 答疑课堂:深入了解NIO的优化实现原理

2、IO多路复用和非阻塞的关系,IO多路复用复用的是啥?

复用:线程;

多路:多个IO事件;

IO多路复用:一个线程去处理多个IO事件(尽可能去压榨了CPU,同时又没有线程切换的开销,所以性能好);解决的是IO事件处理的瓶颈问题

IO多路复用,既可以是非阻塞的,也可以是阻塞的,阻塞是指,在某个IO没有数据达到的时候,是阻塞的,还是非阻塞的;(阻塞的以为着只能阻塞在某个IO上,非阻塞意味着可以进行多个IO的轮询或者监听)

2、netty的主要解决什么问题?什么场景下需要考虑使用netty?

网络连接的问题。需要自建服务器的时候可以使用netty, eg: dubbo, rocketmq等等;

3、netty的核心概念以及核心工作流程是怎样的?

见下面的概念以及执行架构;

Netty的概念

  • Channel
  • EventLoop
  • EventLoopGroup
  • Selector
  • ChannelHandler

Netty执行架构

摘自:http://www.52im.net/thread-2043-1-1.html

当前疑问

1、Netty的Reactor多线程模型,落地是怎么落地的,是怎么设计的,有啥可以借鉴的;

eventLoop 就是Reactor,BossEventLoop就是主reactor,NioEventLoop就是从reactor;

EventLoop就是IO多路复用,进行多路复用的那个线程;

2、dubbo又是怎么使用Netty的;

一问彻底理解dubbo主流程_dubbo 不能内部类-CSDN博客
文章浏览阅读215次。由于我觉得服务端相对简单一点,所以先分析服务端接受请求流程的代码,再分析客户端调用的代码。本文重点解析的是调用以及调用需要初始化的处理器handler等,对于与注册中心的交互解析相对比较少。一.服务端初始化handler这里主要介绍主要的流程,并且默认dubbo协议1.handler整理流程要理清楚服务端调用流程最重要的就是要理清楚服务端的所有处理请求的handler,我们先来看看它的handler是如何初始化,并且逐级传递的我先上一个handler的初始化的流程,然后再上一个handler调用的_dubbo 不能内部类

从包可以看到,dubbo集成netty基本上就很少代码,就是server,然后一个编码解码,然后是一个handler进行适配,将netty的事件为dubbo的事件,然后交给dubbo的handler进行处理

上层集成的时候,也使用了扩展点Transporter,然后指定了Transporter的具体实现为netty,才会触发nettyServer的流程。

一些扩展

1、CPU密集型 和 IO密集型的线程设置;

以前一直不知道怎样的才是cpu密集型,现在知道了,netty, redis等都是,看netty的现场,直接是绑定cpu核心数 + 1;redis也是类似。

2、netty的模式真的相比阻塞的模式能提高性能么?(在IO密集型应用上)因为IO密集型应用最终还是会把工作交给工作线程,工作线程最终还是会阻塞的?