Netty(1)

Netty(1)

Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。 

BIO、NIO和AIO

采用烧水的例子:

BIO: 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。
NIO: 叫一个线程不停的循环观察每一个水壶,根据每个水壶当前的状态去处理。
AIO: 每个水壶上装一个开关,当水开了以后会提醒对应的线程去处理。

BIO 方式:采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接**,**它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理没处理完成后,通过输出流返回应答给客户端,线程销毁。即典型的一请求一应答通用模型。

NIO方式: NIO提供了与传统BIO模型中的Socket和ServerSocket相对应的SocketChannel和ServerSocketChannel两种不同的套接字通道实现。

新增的着两种通道都支持阻塞和非阻塞两种模式。

缓冲区 Buffer 所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,也是写入到缓冲区中。任何时候访问NIO中的数据,都是通过缓冲区进行操作。

通道 Channel 数据的读取和写入要通过Channel,它就像水管一样,是一个通道。通道不同于流的地方就是通道是双向的,可以用于读、写和同时读写操作。

多路复用器 Selector Selector提供选择已经就绪的任务的能力:Selector会不断轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O操作。

AIO方式:在NIO基础之上引入了异步通道的概念。并提供异步文件和异步套接字通道的实现,从而在真正意义上实现了异步非阻塞,之前我们学过的NIO只是非阻塞而非异步。而AIO它不需要通过多路复用器对注册的通道的进行轮训操作即可实现异步读写,从而简化了NIO编程模型。也可以称为NIO2.0,这种模式才是真正的属于异步非阻塞的模型。

零拷贝

传统IO
在这里插入图片描述

一共4次拷贝3状态切换

mmap零拷贝
在这里插入图片描述

一共3次拷贝3次状态切换

sendFile
在这里插入图片描述

一共3次拷贝2次状态切换

Linux2.4优化后
在这里插入图片描述

其实有一次cpu拷贝 kernel buffer ->socket buffer 拷贝信息很少,开销小可以忽略

一共2次拷贝2次切换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值