`
xly1981
  • 浏览: 147178 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

NIO学习

    博客分类:
  • java
阅读更多
最需要关注的是,应用进程、内核、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,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从JDK 1.4版本开始引入的一种新的IO模型,它为Java应用程序提供了...虽然NIO的学习曲线相对较陡,但掌握后,能为复杂IO场景提供强大的解决方案。

    JAVA NIO学习网站

    在《JAVA NIO学习网站》的博文中,作者可能详细讲解了如何使用这些组件以及它们之间的交互。例如,可能会介绍如何创建并配置通道,如何使用缓冲区读写数据,如何注册通道到选择器,以及如何利用选择器处理多个并发...

    nio学习文档及代码

    本资料包包含了"nio学习文档及示例代码",旨在帮助开发者快速理解和应用NIO。 **1. NIO基础** NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的路径,如文件通道、...

    NIO学习总结经典

    《NIO学习总结经典》这篇文章主要探讨了Java的New IO(NIO)框架,这是一个用于高效处理I/O操作的重要库,特别是在处理大量并发连接时。NIO与传统的IO(-blocking I/O)相比,提供了非阻塞的I/O模型,极大地提高了...

    java NIO 学习 聊天室程序 (3)

    在这个“Java NIO 学习 聊天室程序”项目中,我们将深入探讨NIO如何用于创建一个聊天室程序。这个程序可能包含以下几个关键部分: 1. **服务器端**:服务器端使用NIO的ServerSocketChannel监听客户端连接。当新的...

    JAVA_NIO学习总结

    ### JAVA_NIO学习总结 #### 重要知识点概览 JAVA_NIO(Non-blocking I/O,非阻塞I/O)是Java平台中用于替代传统IO(Blocking IO)的一种高性能IO处理模型,首次出现在JDK 1.4中。NIO通过引入通道(Channel)和缓冲区...

    NIO学习与总结

    ### NIO学习与总结 #### 一、NIO概述与核心概念 **NIO(New IO)**,即新输入/输出技术,是Java 1.4版本开始引入的一种新的I/O处理方式,旨在提高Java应用程序的I/O处理效率。与传统的基于流的I/O相比,NIO更加...

    NIO学习-Java源代码分享(含netty)

    在"**NIO学习-Java源代码分享**"这个压缩包中,可能包含了关于NIO的示例代码,包括使用NIO进行文件操作、网络通信的实例,也可能包含Netty或Mina的部分源码,这些都可以作为学习和研究NIO技术的宝贵资源。...

    JAVA Nio 学习探究

    ### JAVA Nio 学习探究 #### NIO 核心概念及基本读写 NIO(New Input/Output)作为 Java 平台上的一个重要的 API 集合,旨在提高传统 IO 操作的效率和灵活性。它最早在 JDK 1.4 中被引入,并在后续版本中得到了...

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    NIO学习总结

    《NIO学习总结》 NIO(Non-blocking I/O,非阻塞I/O)是Java在JDK 1.4引入的一种新的I/O模型,它为Java提供了更高效的数据处理方式,尤其适用于高并发、大数据量的网络应用。相较于传统的BIO(Blocking I/O)模型,...

    nio demo for nio学习笔记(体系结构以及模块介绍)

    **NIO(Non-blocking Input/Output)**是Java在1.4版本引入的一种新的I/O模型,它提供了与...然而,NIO的学习曲线相对较陡峭,需要对操作系统级别的I/O模型有一定了解,但一旦掌握,将极大地提升系统的性能和可扩展性。

    Java NIO学习资料+代码.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java在JDK 1.4版本引入的一种新的I/O模型,它为Java开发者提供了更高效、...学习和掌握Java NIO,能够帮助开发者编写出更高效、更易维护的网络程序。

    NIO学习笔记

    《NIO学习笔记》 在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,与传统的BIO(Blocking I/O)相对应。NIO提供了一种新的方式来处理I/O操作,特别是在处理大量并发连接时,它的...

Global site tag (gtag.js) - Google Analytics