当前位置: 首页 > news >正文

网络IO基础知识

IO基本概念

IO全称为Input/Output,中文为输入/输出。在计算机中,常用的IO设备有硬盘、网络、键盘,显示器等。在操作系统层面,I/O系统有文件、网络、标准输入和输出,管道等。Java提供的IO类库就是用来读写这些IO系统的。

输入流:将文件、网络、标准输入(System.in)、管道中的数据,输入到内存中;
输出流:将内存中的数据输出到文件、网络、标准输出(System.out),管道中。

在这里插入图片描述

系统调用基本概念

当应用程序发起 I/O 调用后,会经历以下步骤:

1. 应用发起read IO请求,然后阻塞  -> 第一阶段
2. 内核先检查buffer是否有相应的缓存数据  -> 第二阶段- 若没有,内核会去IO设备中读取(一般设备IO比较慢,需要等待)- 然后读取到kernel buffer中;- 若有,将数据从内核直接复制到进程空间中
注意:IO的效率主要取决于等待时间wait time 和 拷贝时间copy time

在这里插入图片描述

IO优化技术

mmap(memory-mapped file, 内存映射文件)

  • 适用场景:本地文件的读写,不适合网络【需要对数据大小有预估,网络数据无法预估】
    • 少量文件读写:使用基本的IO技术更合适,尽管需要数据拷贝,但是拷贝的数据量小,不太会影响读写性能
    • 大文件读写:数据拷贝非常影响性能,使用mmap更加合适
  • 基本原理:摒弃用户态和内核态的概念,使用物理内存、虚拟内存、缺页中断架构,相当于直接将数据在磁盘和用户空间之间互相拷贝,减少了数据拷贝次数。

在网络环境中,数据的大小往往是动态变化的,难以提前预估。而 mmap 在使用时通常需要对映射的文件大小等有一定的预估。因为 mmap
是将文件映射到内存空间,这个内存空间是需要预先分配或者至少有一个合理的预期范围的

sendfile零拷贝技术

  • 适用场景:用于两个IO设备之间互相传输数据,尤其是网络IO
  • 基本原理:减少不必要的拷贝次数和系统调用次数。
    • 直接从内核读缓冲区拷贝到内核写缓冲区,节省1次数据拷贝
    • 应用程序只需要一次sendfile系统调用,不需要read,write两次系统调用

阻塞/非阻塞/同步/异步基础概念

阻塞/非阻塞:强调的是主动轮询

  • 阻塞:去一家餐厅就餐,就餐的人太多,取号之后需要一直等待,啥也干不了
  • 非阻塞:取号之后,一会回来看一下有没有轮到你,没有就继续逛,可以干自己的事情

同步/异步:强调的是被通知

  • 异步:取号时登记了手机号,自己可以干自己的事情,服务员会打电话通知你
  • 同步:如果需要自己查看有没有轮到你,不管是阻塞还是非阻塞模式,都是同步
http://www.dtcms.com/a/431821.html

相关文章:

  • 基于ollama运行27b gemma3解决ffmpeg命令生成问题
  • 银河麒麟Kylin-Server-V10
  • 昆明云南微网站搭建张家界网站建设dcwork
  • 正则表达式匹配 - 动态规划
  • Java 开发工具,最新2025 IDEA 使用
  • 动态规划 - 背包详解(下)
  • 北京小程序定制开发seo技能培训课程
  • 个人网站设计内容和要求企业做网站带来的好处
  • 关于校园图书馆网站建设公司设计图
  • 怎么样用自己电脑做网站企业注册信息查询单
  • 自己怎么做家政网站做百科需要发哪些网站
  • 网站开发需要哪些资料wordpress主题黑糖
  • 丽江市网站建设制作aspnet网站开发实例教程pdf
  • 添加Entity Framework Core
  • 中小企业加盟网站建设精品建站教程
  • 凡科建设网站入门版好不青木三色品牌商城网站开发
  • 波峰焊万用治具的制作及使用
  • 怎样在手机上创建网站班级网站首页怎么做
  • 拖鞋设计网站推荐做室内概念图的网站
  • 公司建一个网站昆明seocn整站优化
  • Claude Sonnet 4.5重磅发布:Claude Sonnet 4.5新特性大全|更新了什么?
  • 想做个卷帘门百度优化网站网站的版面布局
  • 网站开发实战视频教程广州 骏域网站建设 陶瓷
  • 国内开源建站cms网站注销主体注销
  • 网站开发相关书籍资料5台电脑做视频网站服务器
  • AI赋能千行百业:金融、医疗、教育、制造业的落地实践与未来展望
  • 漳州专业做网站国家开发银行学生在线系统
  • python 网站开发 前端wordpress开发平台
  • 怎样在国外网站购买新鲜橙花做纯露建筑网站排行
  • 修改/替换/删除k次求最长相同子序列的问题