架构解密从分布式到微服务:深入理解网络,AIO

本文深入探讨了AIO在Java中的应用,对比了AIO与NIO的区别,阐述了AIO的核心概念和使用,包括异步文件处理和Socket通信。同时,介绍了AIO的回调接口CompletionHandler及其在处理读写请求中的角色。文章还提到了Linux AIO的实现问题,指出尽管AIO在设计上优雅,但在Linux实现中存在一些挑战和性能问题。
摘要由CSDN通过智能技术生成

AIO

AIO是I/O模型里一个很高的层次,体现了大道至简的软件美学理念。与NIO相比,AIO的框架和使用方法相对简单很多。

AIO包括两大部分:AIO Files解决了文件的异步处理问题,AIO Sockets解决了Socket的异步处理问题。AIO的核心概念为应用发起非阻塞方式的IO操作,在I/O操作完成时通知应用,同时,应用程序的职责很明确,比如什么时候发起IO操作请求,在I/O操作完成时通知谁来处理。

下图给出了AIO Sockets对读请求的处理流程(写请求同理),应用程序在有读请求时就向Kenel注册此请求,应用的线程就可以继续执行其他操作而无须等待。与此同时,Kernel在发现有数据到达Socket以后,就将数据从内核复制到应用程序的 Buffer里,在复制完成后,回调应用程序的通知接口,应用程序就可以处理此数据了。

架构解密从分布式到微服务:深入理解网络,AIO

 

在编写AIO Socket程序时,我们所要掌握的最关键的一个类是回调接口一CompletionHandler<V,A>,它包括两个方法:void completed(V result,A attachment); voidfailed(Throwable exc,attachment)。

其中,completed方法是异步请求完成时的通知接口,result是返回的结果;attachment则是应用程序捆绑在这个回调接口上的任意对象,可以记录客户端连接对象,或者用来保存Session会话的状态数据,例如已读取的字节信息等。fa

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值