netty系列(一)—netty详解

netty 架构

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

  • netty 架构图
    这里写图片描述

  • 结构说明

    • 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模型
  • 模型图
    这里写图片描述

  • 对应模型类的关系

MainReactor=NioServerBoss  
SubReactor=NioWorker
NioWorker 基本方法说明:
  • 类关系图:
    这里写图片描述

这里写图片描述

  • 方法说明:

    • 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 说明
  • 类关系图
    这里写图片描述
  • 方法说明:

    • 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做的优化:主从多线程,有boss线程,work线程(多线程的目的充分利用cpu的核数)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值