最需要关注的是,应用进程、内核、IO三个概念。
所谓java的NIO的实现,是依赖于JVM和操作系统的实现的,它的设计思路并不是这们语言自己的,而是建立在操作系统IO控制之上的。
按照下面的一步步看。
可以看得文章,第一篇:
http://xmuzyq.iteye.com/blog/783218它的内容说得非常清楚,很好的区分了同步、异步、阻塞、非阻塞
可以参考的好文章
http://blog.csdn.net/shallwake/article/details/5265287这里面的图比较好的描述了应用进程和内核通讯的过程。
还有
http://www.smithfox.com/?e=191也说得不错,是第一篇的补充。
最后可以补充学习一下,涉及proactor和reactor模式的图
http://www.cnblogs.com/ericchen/archive/2011/05/08/2036993.html
proactor模式两个要点:
1.不注册开始读取状态而注册读取完成状态;
2.应用程序把内存空间给到内核,而不是通过读取或写入。
Reactor中需要应用程序自己读取或者写入数据,
Proactor模式中,应用程序不需要进行实际的读写过程,它只需要从缓存区读取或者写入即可,操作系统会读取缓存区或者写入缓存区到真正的IO设备.
nio2.0介绍,就使用到了proactor模式
http://www.iteye.com/topic/472333
可以看出,java的发展都是依赖于OS的发展来的
阻塞IO不必说了
非阻塞IO ,
IO请求时加上O_NONBLOCK一类的标志位,立刻返回,IO没有就绪会返回错误,需要请求进程主动轮询不断发IO请求直到返回正确
IO复用同非阻塞IO本质一样,不
过利用了新的select系统调用,由内核来负责本来是请求进程该做的轮询操作。看似比非阻塞IO还多了一个系统调用开销,不过因为可以支持多路IO,才算提高了效率
信号驱动IO,调用sigaltion系统调用,当内核中IO数据就绪时以SIGIO信号通知请求进程,请求进程再把数据从内核读入到用户空间,这一步是阻塞的。
异步IO,如定义所说,不会因为IO操作阻塞,IO操作全部完成才通知请求进程。
这样以来,同步和阻塞,异步和非阻塞就不会被混淆了,它们不是同一个方面上的概念,不能比较区别
同步和异步是只跟IO操作过程中进程的状态变化有关
阻塞和非阻塞就是进程的两种状态。
分享到:
相关推荐
JAVA NIO学习资料JAVA NIO学习资料
java_nio学习文档
Java NIO学习资料+代码.zip
nio学习文档及示例代码,轻松掌握nio
nio 学习 demo 解决沾包问题 处理因缓冲区满导致写入失败问题 处理因缓冲区满导致写入失败问题 ,代码里面应该在写文件结束后取消掉注册的事件
Nio学习笔记
JAVA_NIO学习总结J
最全的NIO学习资料总结! JAVA_NIO(全面细致).pdf,Java_NIO_细节.pdf nio原理与实例(看).png 提升网管通讯模块的消息吞吐量(两种模式比较).png
NIO学习-Java源代码分享(含netty)
javaNIO学习笔记(csdn)————程序
回味Java基础之NIO!!!
NIO的学习记录以及自己的总结,对关于NIO有个简单深刻的认识,可以应用在各个开发应用之中提升性能
NULL 博文链接:https://zhqyhp.iteye.com/blog/2057286
java NIO的基本知识点学习笔记,不包含具体代码
文章同步:http://blog.csdn.net/wgyscsf/article/details/50953318
包含NIO核心概念、基本文件读写、缓冲区内部实现机制、异步IO、缓冲区更多特性探究、文件锁与字符集
Contents: 1 核心概念以及基本读写 2 缓冲区的实现机制 3 连网与异步IO 4 分散和聚集IO 5 文件锁定
NULL 博文链接:https://zhangshixi.iteye.com/blog/683767
NULL 博文链接:https://zheng12tian.iteye.com/blog/1094811