最近面试问的比较多的问题就是IO这一块了,有些也答出来了,有些答的不好,最近这段时间开始深入了解一些这方面的东西,也想总结一下。

前置点
1,用户空间系统空间
Linux系统会把一个进程分为两个空间,用户空间和系统空间,比如我们正常的编码,操作的都是用户空间的,那如果我们需要调用系统功能,比如拷贝系统文件,这种就需要调用系统组件,获取内核服务,完成操作

IO的两个阶段

 IO的执行过程中分为两个阶段,等待就绪,执行拷贝

等待就绪:我们知道,我们执行IO操作的时候,数据可能来自别的应用程序或者网络,如果没有数据,操作系统是会一直等待的,此时,应用程序可能也会一直等待
执行拷贝:将数据拷贝到应用程序工作区

阻塞与非阻塞,同步与异步

先说同步与非同步,最简单就是看是否启动一个线程或者进程来完成IO这件事情,同步IO的时候,系统会停下来等这个做完才能做别的事情,而异步IO就利用多线程的方式,启动一个新的线程去做这件事情,而自己就可以去干别的事情等待通知

再说阻塞与非阻塞吧,这两个其实关注的是程序在等待调用结果的时候的状态,阻塞是指,你在获取这个结果的时候,你会一直挂起,直到等到完整结果之后你才会继续执行,非阻塞是指,在该进程不能获取结果的时候,没有阻塞线程,这个有点绕,有一个通俗的解释,如果是阻塞的,我要获取这个东西,获取过程中,我就失去了CPU,等到结果之后我才会获取CPU,但是如果我是非阻塞,我就继续持有CPU,我还可以一直检查

几种IO模型
目前比较多的就是5种

  1. 阻塞IO
    最传统的一种IO,即读写会发生阻塞现象的
  2. 非阻塞IO
    用户发起read的时候,并不会失去CPU,会一直check,如果没有成功,会返回一个error,如果收到成功信号,就会发起read操作,获取完整结果
  3. 多路复用IO
    这个就是Java NIO的核心了,会有一个线程管理多个socket的状态,检查是否有准备好的,只有发现真正准备好,才会调用cpu执行IO操作,这块是比较重要的
  4. 信号驱动IO
    用的少,忽略
  5. 异步IO
    起一个线程去执行吧

Java IO的一些思考相关推荐

  1. java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考

    在学习了<文件传输基础--Java IO流> 课程后,发现自己对flush()方法的调用有很多疑惑.在查询资料和自己看源码以及动手试验之后发现有以下几个特点.如有误也请大家指正出来,一切为 ...

  2. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  3. 【图解Java】这下可以真的弄懂Java IO了~

    文章目录 写在前面 Java IO(Stream) 一.IO流的分类和概念 1.1 流的分类 流的原理和解析 二.IO流的常见用法 2.1 这里是输入流的一些读取方法 2.2 提供的一些移动指针的方法 ...

  4. Java IO流--练习2

    1)写一个Java程序,输入3个整数,并求出三个数的最大数和最小数 代码: package 第十二章IO流;import java.io.BufferedReader; import java.io. ...

  5. Java IO 之 InputStream源码

    一.InputStream InputStream是一个抽象类,即表示所有字节输入流实现类的基类.它的作用就是抽象地表示所有从不同数据源产生输入的类,例如常见的FileInputStream.Filt ...

  6. java ioexception异常_12. Java IO: 异常处理

    想要查看此教程的目录请点击:Java IO教程目录贴地址 Streams或Readers/Writers在使用过程中需要是可关闭的.这需要调用close()方法.这需要一点儿思考,看下面的代码: In ...

  7. Java IO: 异常处理

    转载自   Java IO: 异常处理 译文链接 作者:Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 流与Reader和Writer在结束使用的时候,需要正 ...

  8. Java IO 之 InputStream源码(2)

    Writer:李强强 一.InputStream InputStream是一个抽象类,即表示所有字节输入流实现类的基类.它的作用就是抽象地表示所有从不同数据源产生输入的类,例如常见的FileInput ...

  9. java.io.file.sync_Java(25)IO流和File类

    IO流+File类 File类 讲IO流之前先来讲以下File类.Java的标准库Java.io提供了File类来操作文件和目录.操作可以有:新建.删除.重命名等,但是不能访问文件本身的内容,如果想要 ...

最新文章

  1. R语言ggplot2可视化指定图像标题(title)、副标题(subtitle)的内容、字体大小、字体类型、色彩、对齐方式等实战
  2. python下的橡皮线_python线性代数常用操作
  3. Android 网络请求详解
  4. navicat不同数据库数据传输
  5. erp系统是什么软件有哪些
  6. C++基础知识(五)C++的一些特性
  7. linux of命令,Linux命令(30):isof
  8. 9-Shell的逻辑操作符知识介绍-实践及企业案例脚本剖析
  9. sql2008 表名为全数字时查询报错
  10. 混音新手必备软件:FL Studio,用它简单制作混音
  11. pandas 两列数据合并
  12. 虚拟机出现entering emergency mode,使用xfs_rapair出现Device or resource busy解决
  13. leetcode#246 中心对称数
  14. linux鼠标手势软件,在Deepin Linux系统使用Easystroke鼠标手势会更方便工作
  15. Quora精选:为什么软件开发周期总是预估的2~3倍?
  16. 解决nrm不能使用问题
  17. cesium之三维场景展示篇
  18. Hbase--Scan全局扫描中的过滤器
  19. 管理学定律十:罗森塔尔效应与虚假同感偏差
  20. VSTO PPT图表对象的操作(1)

热门文章

  1. BAT“上山下乡”,用AI“打入政府”
  2. Redis 官方可视化工具,功能真心强大!
  3. CMS:听我的,生产环境上要这样配置JVM参数
  4. 说实话,DataGrip真得牛逼,只是你不会用而已~
  5. 为什么 Linux 需要 Swapping
  6. 分享 14 个 Spring MVC 顶级技巧!
  7. 天池NLP大赛来了!
  8. 紧跟大佬的步伐:关于我亲自动手复现了恺明新作MAE这件事
  9. 博三才发文章,打破学校零记录,华科博士入职华为年薪201万
  10. 时间就是金钱!Windows 上必装的 10 款高效软件