热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

浅析JavaIO相关知识点

本篇文章给大家分享了关于javaio的一些相关知识点以及相关内容,对此有需要的朋友可以学习参考下。

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

前置点

1,用户空间系统空间

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

IO的两个阶段

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

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

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

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

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

几种IO模型

目前比较多的就是5种

阻塞IO

最传统的一种IO,即读写会发生阻塞现象的

非阻塞IO

用户发起read的时候,并不会失去CPU,会一直check,如果没有成功,会返回一个error,如果收到成功信号,就会发起read操作,获取完整结果

多路复用IO

这个就是Java NIO的核心了,会有一个线程管理多个socket的状态,检查是否有准备好的,只有发现真正准备好,才会调用cpu执行IO操作,这块是比较重要的

信号驱动IO

用的少,忽略

异步IO

起一个线程去执行吧


推荐阅读
  • Linux笔记:JDK安装与环境变量配置
    本文详细介绍了在Linux系统中安装JDK并配置环境变量的步骤,帮助读者顺利完成Java开发环境的搭建。 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 1.tarzxfapache-activemq-5.12.0-bin.tar.gztarzxfapache-activemq-5.12.0-bin.tar.gz2.cdapac ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文旨在探讨信息安全专业的职业规划路径,结合个人经历和专家建议,为即将毕业的学生提供实用的指导。 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
  • 【妙】bug称它为数组越界的妙用
    1、聊一聊首先跟大家推荐一首非常温柔的歌曲,跑步的常听。本文主要把自己对C语言中柔性数组、零数组等等的理解分享给大家,并聊聊如何构建一种统一化的学习思想 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
author-avatar
-依小冷_217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有