网络编程(4)——AIO

阻塞、非阻塞、同步、异步概念

举个别人博客中看到的栗子:

如果你想吃一份宫保鸡丁盖饭:
同步阻塞: 你到饭馆点餐,然后在那等着,还要一边喊:好饭了没有啊!!!
**同步非阻塞:**在饭馆点完餐,就去遛狗了。不过溜一会,就回饭馆喊了一句:饭好了没啊!!!
**异步阻塞:**遛狗的时候,接到饭馆的电话,说饭做好了,让你亲自去拿
**异步非阻塞:**饭馆打电话说,我们知道您的位置,一会给你送过来,安心遛狗就可以了。

异步的处理

异步无非是通知系统做一些事情。告诉完系统后,自己做其他事情去了。很多时候系统做完某一件事情虎需要做一些后续的操作,怎么办呢?这时候就是告诉异步调用如何做后续处理。通常有两种方式:

  • 将来式:当你希望主线程发起异步调用,并轮训等待结果的时候使用将来式;
  • 回调式:常说的异步回调就是它。 以文件调用为例子:

这里写图片描述

回调式的基本思想是:主线程会派一个侦查员CompletionHandler到独立的线程中执行IO操作。这个侦查员将带着IO的操作的结果返回到主线程中,这个结果会触发它自己的completed或者faild方法(要重写这两个方法)。在异步IO活动结束后,接口java.nio.channels.CompletionHandler会被调用,该接口有两个方法completed(V,A)failed(V,A)方法,其中V表示结果的类型,A是提供结果的附着对象。通过上述两个方法程序才能知道异步IO操作成功或者失败时该如何处理。

AIO引入的新类

  • java.nio.channels.AsynchronousChannel

    • 标记一个channel支持异步IO操作
  • java.nio.channels.AsynchronousServerSocketChannel

    • ServerSocket的aio版本,创建TCP服务端,绑定地址,监听端口等。
  • java.nio.channels.AsynchronousSocketChannel

    • 面向流的异步socket channel,表示一个连接
  • java.nio.channels.AsynchronousChannelGroup

    • 异步channel的分组管理,目的是为了资源共享。一个AsynchronousChannelGroup绑定一个线程池,这个线程池执行两个任务:处理IO事件和派发CompletionHandler。AsynchronousServerSocketChannel创建的时候可以传入一个AsynchronousChannelGroup。
  • java.nio.channels.CompletionHandler

    • 异步IO操作结果的回调接口,用于定义在IO操作完成后所作的回调工作。AIO的API允许两种方式来处理一步操作的结果:返回的Future模式或者注册CompletionHandler。AsynchronousChannelGroup允许绑定不同的线程池。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值