【网络IO】细说网络IO模型【一】

简介: 面试官:我们来简单聊一下网络IO相关东西吧,嗯?不了解是吧,没关系,那今天面试就先到这了。。。

前言


依稀记得当年大学上课的时候,老师说IO这块考试不考,感兴趣的同学可以自行了解。。。一直被蒙在鼓里,直到校招的时候被面试官一套连招问麻了。。。


现如今鄙人已成为一名练习时长两年半的Java练习生,怎么能不了解网络IO背后的细节呢。本篇揭开一波网络IO的神秘面纱


什么是IO


字面意思,input/output输入输出,linux世界中一切皆文件,而文件就是一串二进制流,不管Socket、FIFO、管道还是终端,对我们来说,一切都是二进制流。

  • 在信息的交换过程中只是对这些流进行数据做接收转发,简称为I/O操作。
  • 往流中读取数据,系统调用Read,写入数据,系统调用Write。
  • 通常一个完整的IO包含两个步骤,磁盘IO网络IO


磁盘IO

image.png

网络IO

image.png

  • 完整的IO流程为
  • 磁盘IO负责把磁盘的数据从磁盘经过内核空间加载到用户空间
  • 网络IO负责数据经过用户空间调用内核空间的api发送到网卡


用户空间与内核空间

  1. 操作系统为了支持多个应用同时运行,需要保证不同进程之间相对独立(一个进程的崩溃不会影响其他的进程,恶意进程不能直接读取和修改其他进程运行时的代码和数据)。用户程序不能影响系统调度因此操作系统内核需要拥有高于普通进程的权限, 以此来调度和管理用户的应用程序。
  2. 于是内存空间被划分为两部分,内核空间存储的代码和数据具有更高级别的权限。内存访问的相关硬件在程序执行期间会进行访问控制,使得用户空间的程序不能直接读写内核空间的内存。


IO的阶段

  1. 硬件接口加载数据到内核空间
  2. 内核空间拷贝数据到用户空间
  3. 用户空间无法直接操作底层api,对数据进行加载、拷贝至网卡的操作需要切换成内核空间调用对应api完成


零拷贝

一切流行的组件为了追求速度都做了一些零拷贝的优化,先说一下传统拷贝


传统拷贝

  • 传统的文件传输方式会经历4次数据拷贝
  • 硬件DMA拷贝到内核空间的内核缓冲区
  • 内核空间的内缓冲区CPU拷贝到用户空间的用户缓冲区
  • 数据经过处理后从用户空间的用户缓冲区CPU拷贝到内核空间的内核缓冲区
  • 内核缓冲区DMA拷贝到网卡设备


image.png

mmp + write 零拷贝

  • mmp使用虚拟内存,把内核空间和用户空间的虚拟地址映射在同一个物理地址从而减少数据拷贝次数
  • mmap是将读缓冲区的地址和用户缓冲区的地址进行映射,内核缓冲区和应用缓冲区共享,所以节省了一次CPU拷贝,并且用户进程内存是虚拟的,只是映射到内核的读缓冲区,可以节省一半的内存空

image.png


sendfile 零拷贝

  • sendfile表示在两个文件描述符之间传输数据,它是在操作系统内核中操作的,避免了数据从内核缓冲区和用户缓冲区之间的拷贝操作,因此可以使用它来实现零拷贝。

image.png


相关文章
|
24天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
23天前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
23天前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
61 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
3天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
5天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
20 1
|
5天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
96 1
|
9天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
26 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
18天前
|
机器学习/深度学习 算法 数据挖掘
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet
24 2
|
25天前
|
缓存 Java Linux
硬核图解网络IO模型!
硬核图解网络IO模型!
|
4天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
13 0

热门文章

最新文章