这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。
IO请求的两个阶段:
等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
使用资源阶段:真正进行数据接收和发生。
举例说就是排队和服务。
在等待数据阶段,IO分为阻塞IO和非阻塞IO。
阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用
在使用资源阶段,IO分为同步IO和异步IO。
同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。
异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。
按照Unix的5个IO模型划分
-
阻塞IO
-
非阻塞IO
-
IO复用
-
信号驱动的IO
-
异步IO
从性能上看,异步IO的性能无疑是最好的。
各种IO的特点
-
阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种方式,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程膨胀。
-
非阻塞IO:采用轮询方式,不会形成线程的阻塞。Java的NIO使用这种方式,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大减少了线程数。
-
同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程方式会简单。Java的BIO和NIO都是使用这种方式进行数据处理。
-
异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说增加了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统放放面面。
分享到:
相关推荐
IO模型;IO性能的重要指标;文件系统;逻辑卷管理;Driver & IO Channel;RAID;三分天下 适用人群:Java开发人员 使用场景:想学习JavaIO以及在IO开发中遇到瓶颈 目标:通过本教程的讨论与解析,更加深刻的理解和...
- **Unix的五种IO模型**: - **阻塞IO(Blocked IO)**:程序在读写操作期间被挂起。 - **非阻塞IO(Non-blocking IO)**:程序可以查询I/O状态并进行读写。 - **IO多路复用(IO Multiplexing)**:使用select或epoll等...
- **说说线程安全问题**:在多线程环境下,确保数据的一致性和正确性。 - **重入锁的概念**:支持同一个线程多次获得同一把锁。 - **产生死锁的四个条件**:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。...
传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。本示例"JAVA-NIO-DEMO"提供了关于Java NIO的实际应用,通过Anontion(注解)、Applet(小程序)和NIO的Demo,帮助开发者...
- **IO**:阻塞I/O模型,每次读写操作都会阻塞。 - **NIO**:非阻塞I/O模型,基于通道和缓冲区,提高了I/O操作的效率。 **30. Java反射的作用与原理** - **作用**:动态获取类的信息并操作对象。 - **原理**:通过...
- Socket.IO:实现实时通信,如新动态推送、评论即时通知。 文件"demo_01"可能是项目的一个初步实现或示例代码,包含了基础的结构和部分功能。在实际开发过程中,你需要根据项目需求逐步完善这个示例,实现完整的...
说说.NET中的值类型与引用类型的区别? 在.NET框架中,数据类型可以分为两大类:值类型(Value Types)和引用类型(Reference Types)。这两种类型的主要区别在于它们如何在内存中存储数据。 - **值类型**:这些...
操作系统 Linux系统下你关注过哪些内核参数,说说你知道的 centos 内核配置文件为 /etc/sysctl.conf . 修改参数后启用:sysctl -p ... Linux下IO模型有几种,各自的含义是什么。 IO的本质是socket
- **IO的语法**:了解Java IO流的基本操作,如文件读写、网络通信等。 - **虚拟机方面的语法**:理解JVM的基本工作原理,包括内存模型、垃圾回收等。 #### 二、具体知识点详解 1. **一个 ".java" 源文件中是否可以...
这些只是Java面试中常见的一些问题,实际面试中还可能涉及到多线程、集合框架、IO 流、异常处理、设计模式、JVM 内存模型、数据库交互等更广泛的领域。了解并熟练掌握这些知识点对于准备Java面试至关重要。
- **NIO(New IO)**: 基于通道(Channel)和缓冲区(Buffer)的非阻塞式I/O模型,可以同时处理多个连接,提高I/O效率。 #### Java8/Java7为我们提供了什么新功能 - **Java 8**: Lambda表达式、Stream API、...
- **MVC(Model-View-Controller, 模型-视图-控制器)**: - **Model**:负责数据管理和业务逻辑。 - **View**:负责展示数据。 - **Controller**:负责接收输入并调用Model和View完成用户请求。 - 实现技术包括...
再来说说Backbone.js,这是一个轻量级的前端MVC(Model-View-Controller)框架,帮助开发者组织JavaScript代码,构建复杂的Web应用。Backbone.js提供了模型、视图、集合和路由器等核心概念,使得前端数据管理与UI...
│ 大型公司面试必答之数据结构与算法(二).mp4 │ ├─面试必问-JVM性能调优 │ JVM性能调优 2018-10-25.mp4 │ ├─面试必问-mybaits源码分析 │ │ 鲁班学院-上课笔记mybaits源码分析9-05.docx │ │ │ └─...
Java IO中的常见类有InputStream、OutputStream、Reader、Writer等,字节流用于处理二进制数据,字符流用于处理文本数据。 2. 讲讲NIO。 Java NIO是Java的新IO-API,提供了异步IO、阻塞IO和选择器等机制。 3. ...
神经网络是模拟人脑神经元工作方式的计算模型,常用于机器学习和深度学习。C#中可以使用诸如ML.NET这样的库来构建和训练神经网络。你可以创建一个简单的前馈神经网络来解决分类问题,或者使用卷积神经网络(CNN)...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了在激烈的就业市场竞争中脱颖而出,...在准备面试时,还应关注多线程、集合框架、IO流、异常处理、设计模式、JVM内存模型等相关主题。