码迷,mamicode.com
首页 > Web开发 > 详细

Netty是什么?它能干什么?

时间:2020-04-07 22:30:42      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:nio   reac   select   连接   通信   get   异步   work   jvm   

Netty

异步事件驱动的网络应用程序框架。

特点

  • 高并发
    • 通过Reactor模型基于NIO开发的网络通信框架 
  • 传输快
    • 零拷贝
      • Netty的接受和发送bytebuffer使用堆外直接内存进行socket读写,传统堆内存进行socket读写,JVM将堆内存buffer拷贝到内存,然后写入socket。相比之下,消息在发送多了一次缓冲区的内存拷贝。 
      • Netty提供buffer,聚合多个bytebuffer。传统通过内存拷贝将多个小buffer合并大的buffer。
      • Netty文件传输使用transferto,直接将文件缓冲区的数据发送到目标channel。传统通过循环write导致内存拷贝。  
  • 使用简单
    • 封装NIO,提供调用接口
  • 功能强大
    • 预置多种编解码功能
    • 支持多种主流协议
    • 通过channelhandler对通信框架扩展
  • 性能高
    • IO线程模型
    • 内存零拷贝
    • 内存池设计
    • 串行化处理读写
    • 高性能序列化协议 
  • 稳定
    • 修复所有NIO bug
      • epoll bug,导致selector空轮询,最终导致CPU100% 

应用场景

  • RPC框架实现的基础通信组件,用于各进程节点间的内部通信
  • 定制私有协议栈,Netty提供TCP/UDP和HTTP协议栈
  • 跨界点通信

发送消息方式

  • 直接写入channel,消息从channelpipeline的尾部移动
  • 写入channelhandler绑定的channelhandlercontext,消息从channelpipeline的下一个channelhandler移动

 事件驱动模型

  • 轮询
  • 事件驱动方式。boss线程和work线程,boss线程把事件放入事件队列,work线程消费事件队列中的事件,调用对应的handler处理事件。

Reactor线程模型

单Reactor单线程

技术图片

单Reactor多线程

一个线程负责监听服务端,接受客户端TCP连接请求;一个线程同时处理多条链路,一个链路只对应一个线程

主从Reactor多线程

技术图片

服务器Netty工作架构

每个端口对应一个boss线程

技术图片

Netty是什么?它能干什么?

标签:nio   reac   select   连接   通信   get   异步   work   jvm   

原文地址:https://www.cnblogs.com/ivy-xu/p/12656290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!