【网络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


相关文章
|
4天前
|
存储 网络协议 Linux
【Linux 网络】网络基础(一)(局域网、广域网、网络协议、TCP/IP结构模型、网络传输、封装和分用)-- 详解(下)
【Linux 网络】网络基础(一)(局域网、广域网、网络协议、TCP/IP结构模型、网络传输、封装和分用)-- 详解(下)
|
4天前
|
存储 网络协议 安全
【Linux 网络】网络基础(一)(局域网、广域网、网络协议、TCP/IP结构模型、网络传输、封装和分用)-- 详解(上)
【Linux 网络】网络基础(一)(局域网、广域网、网络协议、TCP/IP结构模型、网络传输、封装和分用)-- 详解(上)
|
4天前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真
该内容是一个关于基于YOLOv2的鱼眼镜头人员检测算法的介绍。展示了算法运行的三张效果图,使用的是matlab2022a软件。YOLOv2模型结合鱼眼镜头畸变校正技术,对鱼眼图像中的人员进行准确检测。算法流程包括图像预处理、网络前向传播、边界框预测与分类及后处理。核心程序段加载预训练的YOLOv2检测器,遍历并处理图像,检测到的目标用矩形标注显示。
|
6天前
|
机器学习/深度学习 人工智能 算法
食物识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
食物识别系统采用TensorFlow的ResNet50模型,训练了包含11类食物的数据集,生成高精度H5模型。系统整合Django框架,提供网页平台,用户可上传图片进行食物识别。效果图片展示成功识别各类食物。[查看演示视频、代码及安装指南](https://www.yuque.com/ziwu/yygu3z/yhd6a7vai4o9iuys?singleDoc#)。项目利用深度学习的卷积神经网络(CNN),其局部感受野和权重共享机制适于图像识别,广泛应用于医疗图像分析等领域。示例代码展示了一个使用TensorFlow训练的简单CNN模型,用于MNIST手写数字识别。
23 3
|
10天前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:生成对抗网络(GAN)
使用Python实现深度学习模型:生成对抗网络(GAN)
24 3
|
11天前
|
Linux 开发工具
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
9 0
|
11天前
|
机器学习/深度学习 自然语言处理 网络安全
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
22 1
|
11天前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
11天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言神经网络模型金融应用预测上证指数时间序列可视化
R语言神经网络模型金融应用预测上证指数时间序列可视化
|
11天前
|
机器学习/深度学习 数据可视化 算法
SPSS Modeler决策树和神经网络模型对淘宝店铺服装销量数据预测可视化|数据分享
SPSS Modeler决策树和神经网络模型对淘宝店铺服装销量数据预测可视化|数据分享

热门文章

最新文章