对于网络IO的理解

网络IO理解

首先服务端将本机地址和端口bind在listensock上,再用listen()去将listensock套接字设置为listen状态,然后调用accept,进入阻塞状态。如果此时有客户端请求连接,就是第一次握手的开始。

客户端会先调用connect来申请连接:

connect调用时是发送SYN,然后服务端返回SYN+ACK,然后客户端的connect返回,发送最后一个ACK,服务端接收到以后accept返回,开始进行read。

在这里插入图片描述

这里的过程,服务端会被阻塞两次,一次是accept,一次是后续的read。

read具体的读取过程就是从sock读取数据到内核缓冲区(网络设备->内核缓冲区),然后read将数据从内核缓冲区拷贝到用户缓冲区(内核缓冲区->用户缓冲区):

在这里插入图片描述

对阻塞IO的理解

这个就是经典的阻塞IO,那么此时就要从read解决问题。

这里要明确一个问题,就绪事件是在数据从网卡拷贝到内核缓冲区以后就产生了,也就是说内核缓冲区有数据了就是就绪事件了。

在这里插入图片描述

对select的理解

如果有多个客户端连接,每个客户端对应一个线程去按部就班处理是不理想的方式。我们可以想到的是把这些fd放在一个容器,然后用一个线程不停地遍历,然后对于有就绪事件的fd进行处理。

对poll的理解

poll相对于select其实就是没有了文件描述符数量的限制,

对epoll的理解

epoll解决了三个问题:

  1. select 调用需要传入 fd 数组,需要拷贝一份到内核,高并发场景下这样的拷贝消耗的资源是惊人的。(可优化为不复制)
  2. select 在内核层仍然是通过遍历的方式检查文件描述符的就绪状态,是个同步过程,只不过无系统调用切换上下文的开销。(内核层可优化为异步事件通知)
  3. select 仅仅返回可读文件描述符的个数,具体哪个可读还是要用户自己遍历。(可优化为只返回给用户就绪的文件描述符,无需用户做无效的遍历)

优化为:

  1. 内核中保存一份文件描述符集合,无需用户每次都重新传入,只需告诉内核修改的部分即可。
  2. 内核不再通过轮询的方式找到就绪的文件描述符,而是通过异步 IO 事件唤醒。
  3. 内核仅会将有 IO 事件的文件描述符返回给用户,用户也无需遍历整个文件描述符集合。

多路复用快的原因在于,操作系统提供了这样的系统调用,使得原来的 while 循环里多次系统调用,变成了一次系统调用 + 内核层遍历这些文件描述符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/433133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客网 华为机试 提前不重复的整数

本题要求提取不重复的整数,然后倒序输出,我们可以采用hashset来存储结果,这样就能避免重复。 为了从右往左获取数字,我们可以把这个数对10取余,得到的余数就是其每一位的数。然后我们把得到的数字添加到hashset中&…

#QT(MP3播放器-部分界面)

1.IDE:QTCreator 2.实验:制作一个mps播放器,界面可以实现鼠标拖动 3.记录: (1)network网络多线程 (2)Http (3)QJsonObject封装JSON对象 (4&am…

c语言-大小写字母的转换

目录 方法一:库函数直接转换 1、toupper的测试代码 2、tolower的测试代码 方法二:通过修改ASCII码值转换 1、自己实现大写转小写 2、自己实现小写转大写 结语 前言: 在使用c语言写代码时,通常会遇到很多将大小写字母相互…

性能测试总结 —— 测试流程篇!

本文主要介绍下性能测试的基本流程,性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,如下图:       下面分别介绍下每个阶段具体需要做什么: 一、性能需求分析: 性能需求分析是整个性能…

从零学习Linux操作系统 第三十部分 部署Anisble

一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…

C语言指针的初步认识--学习笔记(3)

1. 字符指针变量 在C语言中,字符串通常被视为字符数组,但它们可以有不同的表示方式。字符指针变量存储的是字符串的地址。这意味着,当你有一个字符串时,你可以通过改变字符指针的值来改变这个字符串,因为你实际上改变的…

C++_位图

目录 1、位图的使用 2、位图实现 3、位图与哈希表的区别 4、位图的应用 结语 前言: 位图采用的是哈希表的思想,哈希表的映射层面是在字节上,而位图的映射层面就是在bit位上。由于bit位所能展现的信息无非只有‘1’和‘0’,所…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案…

项目管理必备:进度报告撰写指南!

本文将探讨如何将进度报告写作整合到你的工作流程中,包括确定最适合的报告时间、编写方法和与团队一起构建报告结构的建议。最后,还会分享一些撰写进度报告的最佳做法,助你掌握这种对工作有巨大帮助的方法。 什么是进度报告? 它…

Python 应用程序编程接口库之pywin32使用详解

概要 在Python的世界里,有许多优秀的第三方库可以帮助开发者更轻松地处理各种任务。其中,pywin32库是一个特别引人注目的工具,它提供了对Windows API的完整访问,使得开发者能够利用Python来编写强大的Windows应用程序,从简单的脚本到复杂的桌面应用,pywin32都能胜任。 什…

算力调度和云计算有何区别

Canalys发布的研究报告显示,2023年第二季度,全球云基础设施服务支出增长16%,达到724亿美元。 此前云厂商们的高速增长,主要归功于大规模的企业数字化转型和上云。当前市场的增速放缓,除了上云普及带来的市场增量见顶&…

Dockerfile(3) - WORKDIR 指令详解

WORKDIR 切换到镜像中的指定路径&#xff0c;设置工作目录在 WORKDIR 中需要使用绝对路径&#xff0c;如果镜像中对应的路径不存在&#xff0c;会自动创建此目录一般用 WORKDIR 来替代 切换目录进行操作的指令 RUN cd <path> && <do something> WORKDIR…

【算法】顺时针打印矩阵(图文详解,代码详细注释

目录 题目 代码如下: 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和…

Yolov8改进交流

YOLO v8改进 YOLOv8的改进&#xff0c;我接触的主要分为网络改进和代码改进&#xff0c;网络改进就是以注意力、主干为主&#xff0c;代码改进就是类似于Iou&#xff0c;类别权重等修改。 以下是yolov8的原始模型。 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license # YO…

词嵌入向量和位置编码向量的整合

词嵌入向量和位置编码向量的整合 flyfish 文本序列 -> 输入词嵌入向量&#xff08;Word Embedding Vector&#xff09;-> 词向量 位置编码向量&#xff08;Positional Encoding Vector&#xff09; Embedding 的维度使用了3 可以输出打印看结果 from collections im…

如何使用Python操作MySQL的各种功能?高级用法?

当今互联网时代&#xff0c;数据处理已经成为了一个非常重要的任务。而MySQL作为一款开源的关系型数据库&#xff0c;被广泛应用于各种场景。本篇博客将介绍如何使用Python操作MySQL的各种功能&#xff0c;以及一些高级用法。 连接MySQL 在Python中&#xff0c;我们可以使用p…

不同用户同时编辑商品资料导致的db并发覆盖

背景 这个问题的背景来源于有用户反馈&#xff0c;他在商品系统中对商品打的标签不见了&#xff0c;影响到了前端页面上商品的资料显示 不同用户编辑同一商品导致的数据覆盖问题分析 查询操作日志发现用户B确实编辑过商品资料&#xff0c;并且日志显示确实打上了标签&#x…

【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(二)

文章目录 3.4 一个简化的SSM结构3.5 选择机制的性质3.5.1 和门控机制的联系3.5.2 选择机制的解释 3.6 额外的模型细节A 讨论&#xff1a;选择机制C 选择SSM的机制 Mamba论文 第一部分 Mamba:选择状态空间模型的线性时间序列建模(一) 3.4 一个简化的SSM结构 如同结构SSM&#…

C++入门项目:通讯录管理系统

文章目录 一、步骤拆分1.系统需求2.显示菜单3.添加联系人4.显示联系人5.删除联系人6.查找联系人7.修改联系人8.清空通讯录9.退出功能 二、完整代码&#xff08;200行&#xff09;三、手把手视频教程 一、步骤拆分 1.系统需求 利用C来实现一个通讯录管理系统&#xff0c;系统中…

[计算机效率] 软件优化及垃圾清理

1.7 软件优化及垃圾清理 1.7.1 Advanced SystemCare(优化清理) Advanced SystemCare是一款功能强大的系统性能优化软件&#xff0c;可以全方位诊断系统&#xff0c;找到性能瓶颈并进行有针对性的优化&#xff0c;提升系统运行速度和网络速度&#xff0c;还可以清理加速和保护…