• JAVA io理论


    IO/NIO/BIO

    简介
    无论是Socket的读写还是文件的读写,在Java层面的应用开发或者是linux系统底层开发,都属于输入input和输出output的处理,简称为IO读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。

    用户程序进行IO的读写,基本上会用到read&write两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。

    先强调一个基础知识:read系统调用,并不是把数据直接从物理设备,读数据到内存。write系统调用,也不是直接把数据,写入到物理设备。

    read系统调用,是把数据从内核缓冲区复制到进程缓冲区;而write系统调用,是把数据从进程缓冲区复制到内核缓冲区。这个两个系统调用,都不负责数据在内核缓冲区和磁盘之间的交换。底层的读写交换,是由操作系统kernel内核完成的。

    1 内核缓冲与进程缓冲区
    缓冲区的目的,是为了减少频繁的系统IO调用。大家都知道,系统调用需要保存之前的进程数据和状态等信息,而结束调用之后回来还需要恢复之前的信息,为了减少这种损耗时间、也损耗性能的系统调用,于是出现了缓冲区。

    有了缓冲区,操作系统使用read函数把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区中。等待缓冲区达到一定数量的时候,再进行IO的调用,提升性能。至于什么时候读取和存储则由内核来决定,用户程序不需要关心。

    在linux系统中,系统内核也有个缓冲区叫做内核缓冲区。每个进程有自己独立的缓冲区,叫做进程缓冲区。

    所以,用户程序的IO读写程序,大多数情况下,并没有进行实际的IO操作,而

  • 相关阅读:
    2022最新1w字MySQL索引面试题(附md文档)
    自己的数据集做富集分析 自定义基因集做富集分析clusterprolifer
    数据结构试题(三)
    溶出度质量标准的拟定注意事项
    【单片机】C51中的I2C操作-Proteus+Keil4+C语言实现
    Ubantu终端常用命令、快捷键和基本操作
    Ubuntu搭建openvpn服务器
    牛客网刷题(二)
    opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4
    正则表达式——详情版+常用表达式
  • 原文地址:https://blog.csdn.net/m0_71905144/article/details/126307074