Netty框架简述

Netty是什么?

       Netty 是一个广泛使用的 Java 网络编程框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty 的内部实现时很复杂的,但是 Netty 提供了简单易用的 api 从网络处理代码中解耦业务逻辑。 Netty 是完全基于 NIO 实现的,实际上相当于NIO+多线程,所以整个 Netty 都是异步的。 简单点说就是Netty提供了一个简单,间接的方法来操作网络之间的通讯。

Netty的优势是什么?

  1. 并发高

  2. 传输快

  3. 封装好

为什么并发高?

     Netty是基于NIO实现的 ,相较于BIO(单个线程控制单个连接),它的并发性得到了很大的提高(原因在于selector的出现,使得单个线程可以控制多个连接),从下图可以明显看出NIO与BIO的区别:

                                  BIO处理流程

                           NIO处理流程

在BIO中,等待客户端发数据这个过程是阻塞的,这样就造成了一个线程只能处理一个请求的情况,而机器能支持的最大线程数是有限的,这就是为什么BIO不能支持高并发的原因。

而NIO中,当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端——这个过程是阻塞的,这样就能让一个Thread处理更多的请求了。

为什么传输快?

Netty的传输快其实也是依赖了NIO的一个特性——零拷贝。我们知道,Java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是Java对象存放的地方,一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费。

Netty针对这种情况,使用了NIO中的另一大特性——零拷贝,当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

 

   关于零拷贝的内容会在下篇博文介绍。

为什么封装好?

     Netty基于NIO,同时也改进了NIO中的一些问题,将改进方法进行了封装,使用户不用在意底层操作,操作更加简便。详细会在Netty的源码分析进行介绍。

基本组件是什么? 

  • Channel  ----Socket

  • EventLoop ----控制流,多线程处理,并发;

  • ChannelHandler和ChannelPipeline

  • Bootstrap 和 ServerBootstrap

Channel 接口

     基本的I/O操作,在基于java 的网络编程中,其基本的构造是 Socket,在jdk中channel是通讯载体,在netty中channel被赋予了更多的功能。

EventLoop 接口

      EventLoop 是用来处理连接的生命周期中所发生的事情,EventLoop, channel, Thread 以及 EventLoopGroup 之间的关系如下图:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值