Java IO的一些思考

news/2024/6/29 13:53:29

最近面试问的比较多的问题就是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
    起一个线程去执行吧

http://lihuaxi.xjx100.cn/news/272872.html

相关文章

读博读废了是种什么样的体验?

本文来源:科研小助手综合自知乎、E探索医学、考博圈等从全社会总体来看,读博是个人能力极大提升的过程,博士们也都在各行各业里发挥着中流砥柱的作用。但也不可否认存在某些个例,因为读博过程中的一些主观客观原因,没有…

Spring Boot 还能“内存泄露”?排它!

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章来源:美团技术团队(纪兵)8rr.co/38Kh排查过程1. 使用Java层面的工具定位内存区域2、使用系统层面的工具定位堆外内存3、为什么堆外内存没有释放掉呢?总结为了更好地实现对…

linu逻辑分区动态调整大小

linu逻辑分区动态调整大小 注意: 这个动态调整的方法是有丢数据风险的,要确保调整的源分区没有使用或者使用率很低。源分区中如果有重要的文件最好先备份在centos 6.5上操作过lvdisplay 查看已有的分区的大小 lvdisplay ,选择要操作的逻辑分区&#…

我天天加班,被辞退了:比平庸更可怕的是瞎努力

大数据因其背后蕴含的价值被《经济学杂志》称为“新的石油”。过后的十多年,互联网行业靠着人口红利和流量红利野蛮生长。而随着流量获取成本不断提高、运营效率的不断下降,这种粗放的经营模式已经不再可行。企业迫切需要通过数据科学家来实现精细化运营…

Python初学者值得拥有的3个Python优秀实践 你实践了嘛?

DocstringDocstring 是Python文档字符串的英文缩写。Docstring是三重双引号 ”“”中,在所定义模块,函数,类或方法的第一个陈述。这是函数中docstring的最小示例。 deffoo(): “”“This function doesnothing.”"" passprint(foo…

图像采集:机器视觉中图像采集优化方法介绍

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达机器视觉在不同的复杂技术领域有着广泛应用。在简单的应用中(例如,利用背光检测不透明物体的轮廓),成像系统可在宽松的系统…

字节跳动算法刷题宝典.pdf

今天推荐一个关于「算法刷题宝典」的开源项目:力扣Cookbook。力扣 Cookbook是halfrost(中文名:霜神)去年刷的 力扣整理出的 520 题,每道题都写了解题思路,并且每题都 runtime beats 100% 了。至于为什么要求…

linux下jsp环境的搭建

转自http://gehailong.blog.51cto.com/765312/264162作gehailong一 、安装JDK#chmod x jdk-6u13-linux-i586-rpm.bin//给文件加入执行权限#./jdk-6u13-linux-i586-rpm.bin//生成安装文件,运行完此命令后会生成一个jdk-6u13-linux-i586.rpm#rpm -ivh jdk-6u13-linux-i586.rpm//安…