@yulongsun
2016-11-18T08:23:29.000000Z
字数 772
阅读 855
02java
http://www.toutiao.com/a6353093494467510530/
一.
二.几个必须明白的概念
1.阻塞和非阻塞
相对于数据而言
- 阻塞:数据没有准备好,程序就一直等着,知道程序执行好之后才往下执行
- 非阻塞:不管数据有没有准备好,程序都往下执行
2.同步和异步
相对于我们的IO事件而言
- 同步:处理IO的时候,程序不能去干别的事情,等IO事件处理完才能干别的事
- 异步:不关心IO处理的过程,在处理IO的时候可以去做别的事情,然后等待IO事件处理完成的通知。
3.阻塞不等于同步
三.Java现有的IO模型
1. BIO JDK1.4以前的IO模型,阻塞IO
accept
2. NIO JDK1.4以后新增的IO模型,借鉴了Linux的多路复用技术和轮询技术。
3. AIO JDK1.7以后的才有的IO模型,真正的异步处理,把IO读写操作完全交给OS,借鉴了Linux的expoll 模式。
四.Java NIO原理的解读
1. 多路复用(Channel通道) 相当于高速公路
2. 轮询机制
五.Java AIO的简介
六.编写代码并演示
七.总结
1.okio的高效主要体现在三个方面:
- 对数据进行了**分块处理**,这样在大数据IO的时候可以以**块**为单位,这可以提高IO的吞吐率。
- 对数据块使用了**链表**进行管理,这可以仅通过移动“指针”就进行数据的管理,而不用真正去处理数据,而且对扩容来说也十分方便。
- 对闲置的块进行管理,通过一个块池(SegmentPool)的管理,避免系统GC和申请byte时的zero-fill。
2.okio的几个基础的类和接口
- 类Segment
- 类SegmentPool
- 接口Sink
- 接口Source
- 类Buffer
- 类ByteString
- 类AsyncTimeOut