netty系列(一)—netty详解

netty 架构

高性能,事件驱动的NIO框架

  • netty 架构图
    netty系列(一)—netty详解_第1张图片

  • 结构说明

    • event model:可扩展的事件模型
    • Universal Communication API:统一的通讯API

    • zero-copy-capable byte buffer:零拷贝buffer,支持动态扩容

    • channel:socket支持http,nio,oio (AIO基于操作系统实现 )

    • transport service:传输层服务

      • socket&diagram
      • http
    • protocl support:应用层协议支持

netty模块组件

  • bootstrap:netty服务端和客户端
  • buffer:缓冲相关,对NIO Buffer做了一些优化、封装
  • channel:处理客户端和服务端的连接通道
  • container:连接其他容器的代码
  • handler:实现协议编解码的功能
  • logging/util:日志/工具类

netty的主从多线程Reactor模型

  • 模型图
    netty系列(一)—netty详解_第2张图片

  • 对应模型类的关系

MainReactor=NioServerBoss  
SubReactor=NioWorker
NioWorker 基本方法说明:
  • 类关系图:
    netty系列(一)—netty详解_第3张图片

netty系列(一)—netty详解_第4张图片

  • 方法说明:

    • org.jboss.netty.channel.socket.nio.AbstractNioSelector#openSelector:启动NioWork/NioBoss线程
    • org.jboss.netty.util.ThreadRenamingRunnable
    • org.jboss.netty.channel.socket.nio.AbstractNioSelector#run
    • org.jboss.netty.channel.socket.nio.NioWorker.RegisterTask :注册任务
    • org.jboss.netty.channel.socket.nio.AbstractNioWorker#process :处理事件
    • org.jboss.netty.channel.socket.nio.NioWorker#read 读取buffer,放到接受事件到Pipeline
NioServerBoss 说明
  • 类关系图
    netty系列(一)—netty详解_第5张图片
  • 方法说明:

    • org.jboss.netty.channel.socket.nio.NioServerBossPool#newBoss:

    • org.jboss.netty.channel.socket.nio.NioServerBoss#process:业务work处理

    • org.jboss.netty.channel.socket.nio.NioServerBoss#registerAcceptedChannel:装发请求为work,异步转发,轮询方式

    • org.jboss.netty.channel.socket.nio.AbstractNioSelector#run:核心流程

    • org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool#init:初始化work线程

    • org.jboss.netty.channel.Channels#fireMessageReceived(org.jboss.netty.channel.Channel, java.lang.Object) 处理接受的事件

    • org.jboss.netty.channel.socket.nio.AbstractNioSelector#register:注册selector事件

处理流程:
  • 标记selector的状态(wakeup状态):wakeup默认为false,事件任务放到queue,将warkup设置为true
  • selector(注册)
  • 处理任务队列
  • 处理自己的作业(客户端)
代码说明:

netty系列(一)—netty详解_第6张图片

总结

netty做的优化:主从多线程,有boss线程,work线程(多线程的目的充分利用cpu的核数)

你可能感兴趣的:(netty)