简述IO

首先两个区别:

  • 同步(synchronized)、异步(asynchronized)IO的区别:多个IO事件,轮询处理就是同步IO;分时间片处理就是异步IO。
  • 阻塞、非阻塞:阻塞意思是IO要彻底完成非阻塞是说操作后立即返回状态码,不等IO完成

一般来说,IO分为下面这几类:

Blocking IO

同步阻塞。

可以理解为一个线程处理一个connection。多线程下非常低效(大量的线程上下文切换)。比如说:一个线程处理一个socket。

non-blocking IO

同步非阻塞。与java的nio(new-io)是有区别的。java的nio简单来说就是实现了reactor模型+缓冲区。而这里的non-blocking-IO是说的一个socket未完成任务情况下立即响应一个状态码。客户端要轮询查询是否真正完成。

IO multiplexing

异步阻塞。就是说的reactor模型。

相当常用、常见的IO模型。 C的libevent,java的nio等都是基于这个模型实现的的。

一个主线程处理事件队列,把事件分发给worker处理,worker来响应。

缺点是“主线程处理事件队列”是一个相对阻塞的动作。

题外话,reactor模型一般都是基于事件驱动的,而事件驱动就是观察者模式

http://stackoverflow.com/questions/9138294/what-is-the-difference-between-event-driven-model-and-reactor-pattern

asynchronous IO

异步非阻塞。

也就是proactor模型。彻底的实现情况。

对比起reactor接收事件,该处不阻塞了。并且响应的动作也由一个统一入口处理,也不阻塞。

然而实现复杂,并且很多都要操作系统支持才能实现。

好内容分享:

http://www.cnblogs.com/fanzhidongyzby/p/4098546.html

时间: 2024-08-07 14:23:52

简述IO的相关文章

JAVA基础学习day19--IO流一、FileWrite与FileReader

一.IO简述 1.1.简述 IO:input/output IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中. 1.2.结构 字节流抽象类: InputStream,OutputStream 字符流抽象类: Reader.Writer. ps:由这四4个派生出来子类名称都是以父类名作为子类名的后缀 如:InputStream的子类FileInputStream 如:Reader的子类FileReader; 1.3.分类 按操作数据方式为两

第八章网络编程进阶

####一.问答题 1.简述计算机操作系统中的"中断"的作用? 中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程 计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得cpu暂时中断当前正在执行的程序而转去执行相应的事件处理程序. 待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程.它使计算机可以更好更快利用有限的系统资源解决系统响应速度和运行效率的一种控制技术. 实时响应 + 系统调用 2.简述计算机内存中的"内核态

简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分别是什么含义. 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:异步的概念和同步相对.当一个异步过程

线程和IO复用模型简述

一.进程&&线程 1.进程模型 (1) 单进程模型:一个进程响应多个请求 容易造成请求的阻塞 (2) 多线程模型:每个进程响应一个请求 进程量大,进切换次数过多 每个进程地址空间独立,很多空间是重复的数据,所以内存使用率低 2.线程模型(thread) LWP:light Weight Process 在Linux上称为轻量级进程:是进程内部的自运行单位,在Linux上表现形式和进程一样,占用一个端口,但管理方式不同 多核CPU使用下,线程的优势才能发挥,并行执行线程,更好的分配系统资源,

简述C#中IO的应用

在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.IO 定义了一系列类.接口.枚举.结构和委托.它们大多数包含在 mscorlib.dll! 另外有一部分部分 System.IO 命名空间的成员则包含在systcm.dll程序集中. System.IO命名空间的多数类型主要用于编程操作物理目录和文件,而另一些类型则提供了从字符串缓冲区和内存区域中读写数据的方法. 下面是有关S

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总结 引言 1 Hadoop 和 Spark 的关系 Spark 系统架构 1 spark 运行原理 RDD 初识 shuffle 和 stage 性能优化 1 缓存机制和 cache 的意义 2 shuffle 的优化 3 资源参数调优 4 小结 本地搭建 Spark 开发环境 1 Spark-Scal

IO(Input Output)流___字符流、字节流

一.IO流简述------用于操作数据的 IO流用来处理设备之间的数据传输; Java对数据的操作是通过流的方式; Java用于操作流的对象都是在IO包中; 流按操作数据分为: 字节流(通用)和字符流: 按流向分为: 输入流和输出流. 字节流的抽象基类: InputStream , OutputStream 字符流的抽象基类: Reader, Writer 注: 由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀. 如: InputStream的子类FileInputStream :Re

黑马程序员—IO(一)流概述、字符流、字节流、流操作规律

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一节     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按其操作数据的类型分为两种:字节流和字符流. 5)流按其流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:Inp

黑马程序员——IO流概述、字符流、字节流、流操作规律(一)

第一节     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按其操作数据的类型分为两种:字节流和字符流. 5)流按其流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:InputStream和OutputStream 2)字符流的抽象基流:Reader和Writer 注:此四个