多线程初识四

NIO and AIO 


New I/O 与旧式的基于流的I/O相对

再JDK1.4纳入,特点:

1、NIO基于块Block,原来IO是基于流的

2、为所有的原始类型提供Buffer缓存支持

3、增加通道Channel对象

4、支持锁和内存映射文件的文件访问接口

5、提供了基于Selector的异步网络I/O

总结:

1、Buffer类似bean,通道Channel是具体的发送数据

2、Buffer  positon记录当前位置,capacity缓冲区总容量上限代表总容量上限,limit缓冲器容量实际上限代表可读取的总容量,也就是说limit小于等于capacity

3、Channel.flip读写转换,操作Buffer把position从尾巴拉到首位 


网络编程

NIO,可以设置ServerSocketChanel.ConfigureBlocking(true/false)是否阻塞读写操作

如何实现非阻塞NIO呢?

线程--》selector-->可以轮询selectorChannel去获取

NIO非阻塞流程:当selectorChannel准备好数据后,返回selectionKey(表示一对selector和channel的关系),再去拿相应已经准备好的数据

网络编程流程:

1、设置非阻塞并绑定端口号,在ssc里面注册SelectorKey的接收客户端监听事件

2、for无限循环监听客户端数据{

selector.select(); //此方法是阻塞的,只有当有selector准备好返回了selectorKey之后才会停止阻塞

        获取selectorKey(set结构)

        遍历Set

{

如果是接收操作,将socketchannel设置为非阻塞

修改channel,对读监听;

                如果是读操作,则读channel的数据,并读写转换开启新的线程处理msg,

修改channel,对读写都监听;

如果是写操作,则获得的数据写入channel通道,

写完则关闭该通道。若该通过无数据,修改channel对读监听。

}

}

总结:将等待客户端的时间放入一个线程中,而不是让每个请求都开启一个线程,也不会导致请求延迟的时候该线程会被挂起,节省了数据准备的时间因为seletor能复用,提高运行的效率!


AIO (异步IO)

特点:

1、读完了再通知

2、不会加快IO,只是在读完后进行通知

3、使用回调函数进行业务处理

AsynchronousServerSocketChannel类 异步IO实现类



Future模式

A让B回调返回数据A,过程:A发送请求给B,B持有A的引用,先返回成功,并新开一个线程去做事情,做完将数据结果调用A的函数,形成回调。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值