day10Java核心技术36讲(Java提供了哪些IO方式,NIO如何实现多路复用)

一、Java的IO方式

传统的java.io基于流模型,如File抽象输入输出流。交互的方式是同步阻塞的方式。在读写动作完成之前,线程会一直堵塞在那里,它们之间的调用是可靠的线形顺序。java.io的好处是代码比较简单,缺点是效率和扩展性存在局限性,容易称为应用性能的瓶颈。

在Java1.4的NIO框架,提供了Channel、Selector、Buffer等新的抽象,可以构建多路复用,同步非阻塞IO程序,同时提供了更接近底层的高性能数据操作方式。

③在Java7中,NIO有了进一步的改进,也就是NIO2,引入了异步非阻塞IO方式,也有很多人叫它AIO。异步IO操作基于事件和回调机制,可以简单的理解为,应用操作直接返回,而不会阻塞在那里,后台处理完成,操作系统会通知相应线程。

二、线程知识的基本概念

同步与非同步

同步:同步是一种可靠的有序运行机制,当我们进行同步操作时,后续任务是等待当前调用返回,才会进行下一步

异步:其他任务不需要等待当前调回,通常依靠事情、回调等机制实现任务次序关系。

阻塞与非阻塞

阻塞:在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务

非阻塞:不管操作是否结束,直接返回

NIO

Buffer:高效的数据容器(除布尔)。

Channel:是NIO中被用来支持批量式IO操作的一种抽象。

Selector:是NIO实现多路复用的基础,它提供了一种高效的机制。检测Channel是否处于就绪状态。

Chartset:提供Unicode字符串定义。

三、NIO的多路复用机制

①首先,通过Selector.open()创建一个Selector作为类似于调度员的角色。

②然后,创建一个ServerSocketChannel,并且向Selector注册,通过指定的Selection.OP_ACCEPT,告诉调度员,它关注的是最新的连接请求。

③Selector阻塞在Select操作,当有Channel发生接入请求,就会被唤醒

④通过SocketChannel和Buffer进行数据操作。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值