Netty框架学习之(一):Netty框架简介_at io

这里写图片描述

该种模型存在以下两个问题:

  1. 在任何时候都可能有大量的线程处于休眠状态,只是等待输入或者输出数据就绪,这可能算是一种资源浪费
  2. 需要为每个线程的调用栈都分配内存
  3. 即使 Java 虚拟机(JVM) 在物理上可以支持非常大数量的线程, 但是远在到达该极限之前, 上下文切换所带来的开销就会带来麻烦
3.1.2 NIO(Non Blocking IO):非阻塞IO

Java的NIO特性在JDK 1.4中引入,其结构如下:

这里写图片描述

从该图可以看出Selector 是Java 的非阻塞 I/O 实现的关键。它使用了事件通知 API
以确定在一组非阻塞套接字中有哪些已经就绪能够进行 I/O 相关的操作。因为可以在任何的时间检查任意的读操作或者写操作的完成状态。该种模型下,一个单一的线程便可以处理多个并发的连接。
与BIO相比,该模型有以下特点:

  1. 使用较少的线程便可以处理许多连接,因此也减少了内存管理和上下文切换所带来开销
  2. 当没有 I/O 操作需要处理的时候,线程也可以被用于其他任务

虽然Java 的NIO在性能上比BIO已经相当的优秀,但是要做到如此正确和安全并
不容易。特别是,在高负载下可靠和高效地处理和调度 I/O 操作是一项繁琐而且容易出错的任务,此时就时Netty上场的时间了。

3.1.3 Netty

Netty对NIO的API进行了封装,通过以下手段让性能又得到了一定程度的提升

  1. 使用多路复用技术,提高处理连接的并发性
  2. 零拷贝:
  3. Netty的接收和发送数据采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝
  4. Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象进行一次操作
  5. Netty的文件传输采用了transferTo方法,它可以直接将文件缓冲区的数据
  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值