最新资讯

  • 【Linux】五种 IO 模型与非阻塞 IO

【Linux】五种 IO 模型与非阻塞 IO

2025-04-26 23:38:19 1 阅读

🌈 个人主页:Zfox_
🔥 系列专栏:Linux

目录

  • 一:🔥 重新理解 IO
    • 🦋 为什么说网络问题的本质是 I/O 问题?
      • 🎀 从数据流动看网络通信
      • 🎀 网络 I/O 的瓶颈
    • 🦋 如何理解 I/O 的本质?
    • 🦋 什么是高效的 I/O?
      • 🎀 高效 I/O 的目标
      • 🎀 实现高效 I/O 的策略
  • 二:🔥 五种 IO 模型
    • 🦋 生动例子:餐厅点餐
    • 🦋 专业术语介绍
    • 🦋 总结表
  • 三:🔥 思考
    • 🦋 阻塞 vs 非阻塞,非阻塞效率效率一定高吗?
    • 🦋 五种模型中,谁的 I/O 效率最高?
    • 🦋 同步通信 vs 异步通信
  • 四:🔥 非阻塞 IO
    • 🦋 fcntl
    • 🦋 实现函数 SetNonBlock
    • 🦋 非阻塞方式读取标准输入
  • 五:🔥 共勉

一:🔥 重新理解 IO

🦋 为什么说网络问题的本质是 I/O 问题?

🎀 从数据流动看网络通信

  • 网络通信的核心:数据在客户端与服务器之间**双向流动**。
    • 客户端发送请求 → 输出(Write)
    • 服务器接收请求 → 输入(Read)
    • 服务器返回响应 → 输出(Write)
    • 客户端接收响应 → 输入(Read)
  • 每个步骤均涉及 I/O 操作:数据通过网卡、内核缓冲区、用户程序传递,本质是 跨层数据搬运

🎀 网络 I/O 的瓶颈

  • 延迟(Latency):数据从一端到另一端的传输时间(如物理距离、路由跳数)。
  • 带宽(Bandwidth):单位时间内可传输的数据量上限。
  • 并发(Concurrency):同时处理的连接数影响资源分配效率。

总结
网络性能优化的核心是 减少 I/O 等待时间提升 I/O 吞吐量


🦋 如何理解 I/O 的本质?

🔬 IO 就是 input,output,参照物是计算机本身,是计算机系统内部和外部设备进行交互的过程。

IO = 等+拷贝(等是主要矛盾) colorbox{#FF7F00}{IO = 等+拷贝(等是主要矛盾)} IO = +拷贝(等是主要矛盾)

🐳 等待外部设备就绪,当外部设备准备好了以后,通过 CPU 的针脚发送中断信号告知操作系统。操作系统转入内核态,进行拷贝工作。

  1. 等待(Waiting)等待数据就绪(如网络数据到达内核缓冲区、磁盘数据加载到内存)。
  2. 拷贝(Copying)将数据从内核缓冲区复制到用户空间(或反向)。

高效IO colorbox{turquoise}{高效IO} 高效IO
上面说的IO=等待+拷贝

在大多数情况下,时间都浪费在等待上面,因为和等待相比,拷贝要花的时间比等待的时间少的多。

  • 高效 IO 的核心减少等待时间的浪费,而非单纯优化拷贝速度。

等待的分类

  • 主动等待:进程阻塞直到数据就绪(如阻塞式 read())。
  • 被动等待:进程通过轮询或事件通知检查状态(如非阻塞 IO + epoll)。

示例

  • 网络请求:客户端等待服务器响应的 RTT(Round-Trip Time)属于被动等待。
  • 数据库查询:从磁盘读取数据时,CPU 因 IO 阻塞而空闲属于主动等待。

🦋 什么是高效的 I/O?

⚡🧙 任何通信场景,IO 通信效率一定是有上限的,毕竟 花盆里长不出参天大树(受硬件限制)

IO效率低 的原因主要有以下几点:

  1. 等待时间:IO操作通常涉及与外部设备的交互,这些设备的速度远低于CPU和内存。例如,硬盘的读写速度比内存慢几个数量级,网络传输的速度也受带宽和延迟的限制。因此,程序在等待IO操作完成时会浪费大量时间。
  2. 上下文切换:在阻塞IO中,操作系统需要将等待IO的进程挂起,并切换到其他进程执行。这种上下文切换会消耗额外的CPU资源,降低整体效率,
  3. 资源竞争:在高并发环境下,多个进程或线程可能同时请求IO操作,导致资源竞争和排队,进一步增加等待时间。

🎀 高效 I/O 的目标

  1. 最大化 CPU 利用率:减少进程因等待 I/O 而阻塞的时间。
  2. 最小化延迟:快速响应每个 I/O 请求。
  3. 最大化吞吐量:单位时间内处理更多 I/O 操作。

🎀 实现高效 I/O 的策略

策略 1:减少阻塞等待

  • 非阻塞 I/O:轮询检查数据是否就绪,避免进程挂起。
    • 代价:频繁轮询可能导致 CPU 空转。
  • 多路复用(如 epoll:单线程监控多个 I/O 事件,仅处理就绪的描述符。
    • 优势:适合高并发网络服务(如 Web 服务器)。

策略 2:批量处理 I/O

  • 缓冲(Buffering):累积多个小数据包后一次性处理,减少系统调用次数。
    • 示例:TCP 协议的 Nagle 算法合并小数据包。

策略 3:异步化与并行化

  • 异步 I/O(如 io_uring:内核全程处理 I/O,完成后通知进程。
  • 多线程/进程:为每个连接分配独立执行单元(但需权衡上下文切换开销)

由于 IO 大部分时间花在了 等待上,因此高效的 IO 本质:单位时间内,等待的比重越低, IO 效率越高 colorbox{cyan}{由于 IO 大部分时间花在了 等待上,因此高效的 IO 本质:单位时间内,等待的比重越低, IO 效率越高} 由于 IO 大部分时间花在了 等待上,因此高效的 IO 本质:单位时间内,等待的比重越低, IO 效率越高

二:🔥 五种 IO 模型

在了解相关知识之前,我们先来看个例子,方便我们对其的理解

🦋 生动例子:餐厅点餐

角色定义

  • 进程:顾客(发起 I/O 请求的主体)。
  • 文件描述符:订单号(标识一个 I/O 请求)。
  • 数据:顾客点的餐(需要处理的内容)。

1.1 阻塞 I/O

  • 场景
    顾客下单后,一直坐在餐桌前等待,直到服务员端上菜才能做其他事(如玩手机)。
  • 关键点
    • 顾客(进程)在等待期间完全被阻塞。
    • 订单号(文件描述符)对应唯一的请求。

1.2 非阻塞 I/O

  • 场景
    顾客下单后,每隔 5 秒去厨房问一次“我的菜好了吗?”,期间可以喝水、聊天。
  • 关键点
    • 顾客(进程)需要主动轮询状态。
    • 若厨房(内核)回答“没好”,顾客继续做其他事。

1.3 信号驱动 I/O

  • 场景
    顾客下单后,留下手机号给服务员,继续聊天。厨房准备好菜时,服务员打电话通知顾客取餐。
  • 关键点
    • 数据就绪时内核(服务员)通过信号(电话)通知进程(顾客)。
    • 顾客仍需自己从厨房端走菜(同步拷贝数据)。

1.4 多路转接 I/O

  • 场景
    顾客同时点了咖啡和蛋糕,告诉大堂经理“两样都好了叫我”。经理一直监听多个订单,任一就绪时通知顾客。
  • 关键点
    • 一个进程(顾客)通过多路复用接口(经理)监控多个文件描述符(订单)。
    • 仍需顾客自己取餐(同步拷贝数据)。

1.5 异步 I/O

  • 场景
    顾客下单后,继续办公。厨房准备好菜后,服务员直接将菜端到顾客桌上,并说“您的菜齐了”。
  • 关键点
    • 数据准备和端菜(拷贝)全程由内核(服务员)完成。
    • 顾客(进程)无需参与任何等待或操作。

🦋 专业术语介绍

  1. 阻塞 I/O (Blocking I/O)

    • 进程发起 I/O 操作后,立即进入阻塞状态,(在内核将数据准备好之前,系统调用一直等待)直到内核将数据准备好并拷贝到用户空间后,进程才恢复执行。
    • 所有的套接字默认是阻塞方式
    • 同步 I/O:进程全程需要等待数据就绪和拷贝完成。
  2. 非阻塞 I/O (Non-blocking I/O)

    • 进程发起 I/O 操作后,内核立即返回一个状态值(未就绪),进程通过轮询(Polling) 反复检查数据是否就绪,期间可以执行其他任务。
    • 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回 EWOULDBLOCK 错误码.
    • 轮询:意指程序员循环的方式反复尝试读写文件描述符。这对 CPU 来说是较大的浪费, 一般只有特定场景下才使用.
    • 同步 I/O:进程需要主动检查数据状态并完成拷贝。
  3. 信号驱动 I/O (Signal-driven I/O)

    • 进程发起 I/O 操作后,内核在数据就绪时发送信号(如 SIGIO 通知进程,进程随后执行数据拷贝。
    • 同步 I/O:数据拷贝阶段仍需进程主动完成。
  4. 多路转接 I/O (Multiplexing I/O)

    • 进程通过 selectpollepoll 同时监控多个文件描述符,当任一描述符数据就绪时,内核通知进程进行处理。
    • 同步 I/O:数据就绪后仍需进程主动拷贝数据。

虽然从流程图上看起来和阻塞 IO 类似实际上最核心在于 IO 多路转接 能够同时等待多个文件描述符的就绪状态.

  1. 异步 I/O (Asynchronous I/O)
    • 进程发起 I/O 操作后,内核 全程负责数据准备和拷贝,完成后通过回调(如信号或回调函数)通知进程。
    • 异步 I/O进程无需参与数据准备或拷贝


🦋 总结表

  • 同步 I/O
    • 阻塞 I/O非阻塞 I/O信号驱动 I/O多路转接 I/O
    • 共同点:数据拷贝阶段需进程主动完成(即使通过信号或轮询触发)。
  • 异步 I/O
    • 数据准备和拷贝全程由内核处理,进程无需参与。
I/O 模型同步/异步例子类比进程角色
阻塞 I/O同步干等上菜全程阻塞
非阻塞 I/O同步轮询询问厨房主动轮询
信号驱动 I/O同步电话通知取餐被动响应信号
多路转接 I/O同步经理监听多个订单批量监听
异步 I/O异步服务员直接端菜到桌完全无需参与

三:🔥 思考

🦋 阻塞 vs 非阻塞,非阻塞效率效率一定高吗?

答案:
不一定,非阻塞 I/O 的效率取决于具体场景。

  • 非阻塞 I/O 的优势
    进程在等待数据就绪期间可以执行其他任务(避免完全阻塞),适合需要同时处理多任务的场景。
    例子:餐厅顾客边等餐边聊天(非阻塞)比干等的顾客(阻塞)更高效。
  • 非阻塞 I/O 的劣势
    如果频繁轮询(如每秒检查 1000 次),会导致 CPU 资源浪费,甚至比阻塞 I/O 效率更低。
    例子:顾客每隔 1 秒就去厨房问一次,导致自己无法专心聊天,服务员也被频繁打扰。

结论

  • 低并发场景:阻塞 I/O 更简单高效(避免轮询开销)。
  • 高并发场景:非阻塞 I/O + 多路复用(如 epoll)效率更高(避免大量线程阻塞)

🦋 五种模型中,谁的 I/O 效率最高?

答案:
异步 I/O(如 Linux 的 io_uring)理论效率最高,但实际中 多路复用 I/O(如 epoll 在同步模型中更常用。

  • 异步 I/O
    • 优势:内核全程处理数据准备和拷贝,进程完全无需等待(服务员直接端菜到桌)。
    • 限制:依赖操作系统和硬件的支持(如 Linux 的异步 I/O 实现复杂)。
  • 多路复用 I/O(epoll
    • 优势:单线程监控大量文件描述符,避免进程/线程频繁切换(大堂经理统一管理订单)。
    • 场景:高并发网络服务器(如 Nginx、Redis)的核心模型。

总结

  • 异步 I/O 理论最优,但实际中多路复用 I/O 因兼容性和成熟度更常用
  • 异步 I/O 的高效主要和其特点无关,还是得依靠程序员自己,而多路复用 I/O 可以用于处理大批网络数据,降低了等的比重

因此总的来说,我们更认为 多路复用的 I/O 效率更高

🦋 同步通信 vs 异步通信

同步 和 异步 关注的是消息通信机制.

  • 所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回. 但是一旦调用返回,就得到返回值了;
    • 换句话说,就是由调用者主动等待这个调用的结果;
  • 异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果;
    • 换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果; 而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用.

另外:之前我们在讲 多进程多线程 的时候,也提到同步和互斥。
注意:这里的同步通信和进程之间的同步是完全不相干的概念.

  • 进程/线程同步 也是进程/线程之间直接的制约关系
  • 是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调
    他们的工作次序而等待、传递信息所产生的制约关系。尤其是在访问临界资源的时候.

因此以后在看到 “同步” 这个词,一定要先搞清楚大背景是什么。这个同步是同步通信异步通信的同步, 还是同步与互斥的同步

四:🔥 非阻塞 IO

🦋 fcntl

一个文件描述符, 默认都是阻塞 IO.

函数原型如下.

NAME
       fcntl - manipulate file descriptor

SYNOPSIS
       #include 
       #include 

       int fcntl(int fd, int cmd, ... /* arg */ );

cmd 是命令,是要操作的类型。主要的操作类型有:

  • 获取,设置文件状态信息:cmd=F_GETFL,F_SETFL。
  • 复制现有的描述符,cmd=F_DUPFD。
  •  获取,设置文件描述符标识, ,cmd=F_GETFD,F_SETFD  colorbox{pink}{ 获取,设置文件描述符标识, ,cmd=F_GETFD,F_SETFD }  获取,设置文件描述符标识cmd=F_GETFDF_SETFD 
  • 获取,设置异步IO所有权,cmd=F_GETOWN,F_SETOWN。
  • 获取、设置记录锁,cmd=F_GETLK,F_SETLK,F_SETLKW。

🧊 我们此处只是用第三种功能, 获取/设置文件状态标记 , 就可以将一个文件描述符设置为非阻塞. 文件状态标志包括 O_APPENDO_NONBLOCK

🦋 实现函数 SetNonBlock

⚙️ 基于 fcntl , 我们实现一个 SetNoBlock 函数, 将文件描述符设置为非阻塞.

#include 
#include 

// 让文件描述符非阻塞
void SetNonBlock(int fd)
{
    int f1 = fcntl(fd, F_GETFL);
    if(f1 < 0)
    {
        perror("fcntl");
        return ;
    }
    fcntl(fd, F_SETFL, f1 | O_NONBLOCK);    //  O_NONBLOCK 让fd 以非阻塞的方式进行工作
}
  • 使用 F_GETFL 将当前的文件描述符的属性取出来 (这是一个位图).
  • 然后再使用 F_SETFL 将文件描述符设置回去. 设置回去的同时, 加上一个 O_NONBLOCK 参数.

🦋 非阻塞方式读取标准输入

#include 
#include 
#include 
#include 
#include 
#include 

// 让文件描述符非阻塞
void SetNonBlock(int fd)
{
    int f1 = fcntl(fd, F_GETFL);
    if(f1 < 0)
    {
        perror("fcntl");
        return ;
    }
    fcntl(fd, F_SETFL, f1 | O_NONBLOCK);    //  O_NONBLOCK 让fd 以非阻塞的方式进行工作
}

int main()
{
    std::string tips = "Please Enter# ";
    char buffer[1024];

    SetNonBlock(0);

    while(true)
    {
        write(0, tips.c_str(), tips.size());
        // 非阻塞,如果我们不做输入,数据不就绪,以出错形式返回!!
        // read 不是有读取失败(-1)吗?失败vs底层数据没就绪 -> 底层数据没就绪,不算失败
        // 如果是 -1, 失败vs底层数据没就绪我们后续的做法是不同的!
        // read -> -1, 失败vs底层数据没就绪 -> 需要区分的必要性的!
        // errno 表示:更详细的出错原因, 最近一次调用,出错的时候的出错码
        int n = read(0, buffer, sizeof(buffer));
        if(n > 0)
        {
            buffer[n] = 0;
            std::cout << "echo# " << buffer << std::endl;
        }
        else if(n == 0)
        {
            std::cout << "read file end" << std::endl;
            break;
        }
        else
        {
            // EAGAIN		11	/* Try again */
            // EWOULDBLOCK	EAGAIN	/* Operation would block */
            if(errno == EAGAIN || errno == EWOULDBLOCK)
            {
                // 做其他事情呢?

                std::cout << "底层数据,没有就绪" << std::endl;
                sleep(1);

                continue;
            }
            else if (errno == EINTR)
            {
                std::cout << "被中断, 重新来" << std::endl;
                sleep(1);

                continue;
            }
            else
            {
                std::cout << "read error: " << n << ", errno: " << errno << std::endl;
            }
        }
    }

    return 0;
}

五:🔥 共勉

😋 以上就是我对 【Linux】五种 IO 模型与阻塞 IO 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉

本文地址:https://www.vps345.com/2516.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 python MCP javascript 前端 chrome edge ssh llama 算法 opencv 自然语言处理 神经网络 语言模型 阿里云 网络 网络安全 网络协议 进程 操作系统 进程控制 Ubuntu ubuntu deepseek Ollama 模型联网 API CherryStudio harmonyos 华为 开发语言 typescript 计算机网络 数据库 centos oracle 关系型 安全 分布式 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn tcp/ip RTSP xop RTP RTSPServer 推流 视频 react.js 前端面试题 node.js 持续部署 rust http java ssl Dell R750XS 科技 ai 人工智能 个人开发 udp unity uni-app github 创意 社区 ollama llm php android pycharm ide pytorch golang GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse 深度学习 YOLO 目标检测 计算机视觉 笔记 C 环境变量 进程地址空间 智能路由器 外网访问 内网穿透 端口映射 docker 容器 adb nginx 监控 自动化运维 windows 运维开发 macos django flask web3.py numpy 鸿蒙 live555 rtsp rtp 前端框架 flutter Hyper-V WinRM TrustedHosts web安全 Kali Linux 黑客 渗透测试 信息收集 面试 性能优化 jdk intellij-idea 架构 IIS .net core Hosting Bundle .NET Framework vs2022 es jvm cpu 内存 实时 使用 电脑 dell服务器 go 代理模式 后端 kvm 无桌面 命令行 经验分享 媒体 微信公众平台 YOLOv12 svn 开源 asm YOLOv8 NPU Atlas800 A300I pro asi_bench vscode 代码调试 ipdb c++ ecm bpm ddos c语言 qt stm32项目 单片机 stm32 Qwen2.5-coder 离线部署 机器学习 chatgpt 大模型 llama3 Chatglm 开源大模型 spring c# ping++ Dify jenkins 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 mongodb 3d fpga开发 测试工具 1024程序员节 debian PVE zotero WebDAV 同步失败 虚拟化 半虚拟化 硬件虚拟化 Hypervisor java-ee 计算机外设 mac 软件需求 AI编程 物联网 iot 硬件架构 系统架构 websocket wsl2 wsl html 搜索引擎 .netcore 集成学习 集成测试 sql KingBase 云原生 minicom 串口调试工具 学习方法 学习 NPS 雨云服务器 雨云 ollama下载加速 oceanbase rc.local 开机自启 systemd 麒麟 微信 微信分享 Image wxopensdk unix 负载均衡 智能手机 NAS Termux Samba Linux 银河麒麟 kylin v10 麒麟 v10 conda kylin 深度优先 图论 并集查找 换根法 树上倍增 ruoyi spring boot tomcat postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 低代码 ESP32 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 nuxt3 vue3 实时音视频 react next.js 部署 部署next.js 自动化 蓝耘科技 元生代平台工作流 ComfyUI maven intellij idea microsoft HarmonyOS Next dubbo redis mybatis bash 银河麒麟服务器操作系统 系统激活 express av1 电视盒子 机顶盒ROM 魔百盒刷机 gitee list 数据结构 数学建模 多进程 .net 安全威胁分析 ansible playbook 华为云 嵌入式硬件 温湿度数据上传到服务器 Arduino HTTP elasticsearch openEuler unity3d ArcTS 登录 ArcUI GridItem android studio 交互 gitlab LDAP mysql AI 爬虫 数据集 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 微服务 springcloud 博客 HCIE 数通 大模型微调 腾讯云 vim 嵌入式 linux驱动开发 arm开发 软件工程 pillow json html5 firefox kamailio sip VoIP Windsurf 统信 国产操作系统 虚拟机安装 kubernetes VMware安装Ubuntu Ubuntu安装k8s k8s mysql离线安装 ubuntu22.04 mysql8.0 WSL win11 无法解析服务器的名称或地址 串口服务器 僵尸进程 程序人生 系统开发 binder 车载系统 framework 源码环境 缓存 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 webrtc DeepSeek-R1 API接口 pdf Docker Compose docker compose docker-compose 多线程服务器 Linux网络编程 springsecurity6 oauth2 授权服务器 token sas 企业微信 Linux24.04 deepin rabbitmq visualstudio prometheus apache jmeter 软件测试 matlab EasyConnect Cline ecmascript nextjs reactjs Trae AI代码编辑器 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 Deepseek gateway Clion Nova ResharperC++引擎 Centos7 远程开发 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 sqlserver 大数据 大数据平台 向日葵 firewalld ffmpeg 音视频 rpc 远程过程调用 Windows环境 微信小程序 小程序 safari pip Mac 系统 监控k8s集群 集群内prometheus 直播推流 远程工作 机器人 mcu 历史版本 下载 安装 git 无人机 RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 毕设 jar gcc g++ g++13 AIGC gpt JAVA Java spring cloud 华为od 相差8小时 UTC 时间 zabbix asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 WSL2 jupyter gitea arm hadoop big data 中间件 C语言 服务器主板 AI芯片 信息与通信 nvidia 佛山戴尔服务器维修 佛山三水服务器维修 ipython openwrt 矩阵 tcp FTP服务器 yum 服务器管理 宝塔面板 配置教程 服务器安装 网站管理 医疗APP开发 app开发 devops ci/cd kafka 匿名管道 命名管道 编辑器 IPMITOOL BMC 硬件管理 Wi-Fi 客户端 QQ bot Docker web Socket ESXi DNS ros2 moveit 机器人运动 软考 ip命令 新增网卡 新增IP 启动网卡 prompt IO模型 DeepSeek gpu算力 echarts css 工业4.0 ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 Invalid Host allowedHosts vue AD 域管理 云电竞 云电脑 todesk postgresql 网站搭建 serv00 云服务 wireshark 显示过滤器 ICMP Wireshark安装 微信开放平台 微信公众号配置 职场和发展 远程登录 telnet EMUI 回退 降级 升级 pygame 支付 微信支付 开放平台 压力测试 DevEco Studio 系统安全 agi 交换机 eureka uniapp 线性代数 电商平台 UOS 统信操作系统 linux安装配置 小智AI服务端 xiaozhi ASR TTS n8n 工作流 workflow asp.net大文件上传下载 kali 共享文件夹 虚拟机 鸿蒙系统 ui dify shell 图像处理 threejs 3D zookeeper cursor okhttp 音乐服务器 Navidrome 音流 MCP server C/S LLM nfs nas windows日志 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 数据挖掘 Anolis nginx安装 环境安装 linux插件下载 链表 cuda 版本 服务器繁忙 远程桌面 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 Open WebUI https H3C iDRAC R720xd 客户端与服务端通信 CPU 主板 电源 网卡 freebsd 大语言模型 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 图形化界面 URL XFS xfs文件系统损坏 I_O error 架构与原理 测试用例 功能测试 磁盘监控 kind 服务器配置 聊天室 前后端分离 ocr 命令 华为认证 网络工程师 pgpool 技能大赛 visual studio code 田俊楠 file server http server web server muduo X11 Xming GCC crosstool-ng 生物信息学 远程连接 rdp 实验 游戏程序 王者荣耀 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 minio 政务 分布式系统 监控运维 Prometheus Grafana Spring Security 策略模式 单例模式 selete 高级IO 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 弹性计算 KVM 计算虚拟化 弹性裸金属 outlook 多层架构 解耦 elk gpt-3 文心一言 设计模式 跨域 自动化测试 性能测试 virtualenv 能力提升 面试宝典 技术 IT信息化 硬件 设备 GPU PCI-Express 阻塞队列 生产者消费者模型 服务器崩坏原因 W5500 OLED u8g2 TCP服务器 jetty undertow Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 grafana 交叉编译 tcpdump ISO镜像作为本地源 r语言 数据可视化 midjourney AI写作 SSH etcd 数据安全 RBAC p2p Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 netty MNN Qwen docker命令大全 5G 3GPP 卫星通信 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 HTTP 服务器控制 ESP32 DeepSeek OD机试真题 华为OD机试真题 服务器能耗统计 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 银河麒麟桌面操作系统 Kylin OS 国产化 DeepSeek行业应用 Heroku 网站部署 状态管理的 UDP 服务器 Arduino RTOS MacMini 迷你主机 mini Apple 宠物 毕业设计 免费学习 宠物领养 宠物平台 ios 驱动开发 SSH 服务 SSH Server OpenSSH Server risc-v 游戏机 鲲鹏 昇腾 npu pppoe radius 小艺 Pura X 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 excel Netty 即时通信 NIO 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 计算机 vasp安装 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 IIS服务器 IIS性能 日志监控 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 干货分享 黑客工具 密码爆破 AI agent 繁忙 解决办法 替代网站 汇总推荐 AI推理 Claude 执法记录仪 智能安全帽 smarteye 数据分析 tailscale derp derper 中转 dba SysBench 基准测试 程序员 互信 Radius C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 googlecloud qt项目 qt项目实战 qt教程 宕机切换 服务器宕机 VR手套 数据手套 动捕手套 动捕数据手套 XCC Lenovo 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 统信UOS bonding 链路聚合 其他 银河麒麟高级服务器 外接硬盘 Kylin saltstack windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 根服务器 7z embedding transformer 社交电子 输入法 数据库系统 游戏服务器 Minecraft EMQX MQTT 通信协议 DOIT 四博智联 hibernate skynet 网络结构图 远程 执行 sshpass 操作 junit 阿里云ECS 漏洞 LORA NLP 同步 备份 建站 vscode 1.86 laravel AI大模型 大模型入门 大模型教程 直流充电桩 充电桩 IPMI Linux环境 需求分析 规格说明书 chrome devtools selenium chromedriver 豆瓣 追剧助手 迅雷 USB网络共享 Cookie arkUI 火绒安全 Nuxt.js Xterminal 剧本 c 开机自启动 aws 恒源云 Google pay Apple pay AD域 vSphere vCenter 软件定义数据中心 sddc Cursor 反向代理 vmware 卡死 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer ue4 着色器 ue5 虚幻 protobuf 序列化和反序列化 CORS 目标跟踪 OpenVINO 推理应用 飞书 FunASR 强制清理 强制删除 mac废纸篓 cudnn anaconda mamba Vmamba 语法 消息队列 边缘计算 AutoDL oneapi 自动驾驶 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 Ark-TS语言 视觉检测 VMware创建虚拟机 MS Materials openssl 密码学 黑苹果 VMware 小游戏 五子棋 tidb GLIBC cnn GoogLeNet sdkman xml Agent code-server CLion IDE ip 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 信息可视化 网页设计 perf 华为机试 C++ Python alias unalias 别名 网络用户购物行为分析可视化平台 大数据毕业设计 指令 cmos 自定义客户端 SAS Erlang OTP gen_server 热代码交换 事务语义 进程信号 ukui 麒麟kylinos openeuler rust腐蚀 npm wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 重启 排查 系统重启 日志 原因 hugo 框架搭建 openstack Xen VMware安装mocOS macOS系统安装 SWAT 配置文件 服务管理 网络共享 源码 课程设计 回显服务器 UDP的API使用 gaussdb armbian u-boot 混合开发 JDK xss regedit 开机启动 remote-ssh 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 springboot AI作画 gradle 京东云 设置代理 实用教程 基础入门 编程 C# MQTTS 双向认证 emqx Logstash 日志采集 micropython esp32 mqtt RustDesk自建服务器 rustdesk服务器 docker rustdesk hive Hive环境搭建 hive3环境 Hive远程模式 思科模拟器 思科 Cisco linux 命令 sed 命令 ftp 云服务器 VPS pyqt centos-root /dev/mapper yum clean all df -h / du -sh WebRTC ux 多线程 vscode1.86 1.86版本 ssh远程连接 eNSP 网络规划 VLAN 企业网络 easyui langchain flash-attention 报错 open Euler dde RTMP 应用层 WebUI DeepSeek V3 LLM Web APP Streamlit camera Arduino 电子信息 linux环境变量 opensearch helm IDEA 算力 权限 产品经理 RAID RAID技术 磁盘 存储 MI300x 孤岛惊魂4 epoll TrinityCore 魔兽世界 yum源切换 更换国内yum源 lua sysctl.conf vm.nr_hugepages adobe 传统数据库升级 银行 LLMs 单一职责原则 网络编程 聊天服务器 套接字 TCP Linux PID opcua opcda KEPServer安装 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm clickhouse open webui 实时互动 LInux idm Headless Linux 音乐库 群晖 飞牛 NFS redhat Ubuntu Server Ubuntu 22.04.5 文件分享 可信计算技术 安全架构 网络攻击模型 iis VSCode 移动云 chfs ubuntu 16.04 FTP 服务器 飞牛NAS 飞牛OS MacBook Pro 崖山数据库 YashanDB 银河麒麟操作系统 网络穿透 服务器部署ai模型 TRAE 软件构建 SSL 域名 rsyslog Playwright Reactor bug nac 802.1 portal raid5数据恢复 磁盘阵列数据恢复 裸金属服务器 弹性裸金属服务器 僵尸世界大战 游戏服务器搭建 远程控制 远程看看 远程协助 致远OA OA服务器 服务器磁盘扩容 AI 原生集成开发环境 Trae AI 硬件工程 嵌入式实习 dns 三级等保 服务器审计日志备份 蓝桥杯 v10 镜像源 软件 备选 网站 api 调用 示例 Kylin-Server 多个客户端访问 IO多路复用 TCP相关API iphone bootstrap iftop 网络流量监控 Docker Hub docker pull daemon.json 黑客技术 mariadb 流式接口 ceph 本地部署 联想开天P90Z装win10 技术共享 sqlite rocketmq 业界资讯 SSE 模拟退火算法 mosquitto 深度求索 私域 知识库 网工 安卓 压测 ECS ssrf 失效的访问控制 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 文件系统 路径解析 Unity Dedicated Server Host Client 无头主机 开发环境 SSL证书 frp AISphereButler 腾讯云大模型知识引擎 efficientVIT YOLOv8替换主干网络 TOLOv8 flink DenseNet xrdp 视频编解码 源码剖析 rtsp实现步骤 流媒体开发 thingsboard Linux的基础指令 Ubuntu 24.04.1 轻量级服务器 MacOS录屏软件 odoo 服务器动作 Server action 环境迁移 Dell HPE 联想 浪潮 CH340 串口驱动 CH341 uart 485 arcgis 知识图谱 etl 信号处理 问题解决 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 css3 开发 bcompare Beyond Compare 模拟器 教程 运维监控 自动化编程 状态模式 ragflow pyautogui c/c++ 串口 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 ubuntu24.04.1 我的世界 我的世界联机 数码 UOS1070e Linux find grep VS Code proxy模式 UDP 烟花代码 烟花 元旦 代理 性能调优 安全代理 onlyoffice powerpoint cd 目录切换 dity make 用户缓冲区 模拟实现 PX4 ROS hexo fast 服务器时间 fd 文件描述符 ArkUI 多端开发 智慧分发 应用生态 鸿蒙OS apt 国内源 ruby tensorflow cocoapods xcode 中兴光猫 换光猫 网络桥接 自己换光猫 SenseVoice 实战案例 searxng neo4j 李心怡 Windows ai工具 firewall yolov8 单元测试 cfssl 游戏引擎 抗锯齿 IMX317 MIPI H265 VCU glibc xpath定位元素 毕昇JDK ShenTong 灵办AI 元服务 应用上架 换源 Debian 线程 强化学习 edge浏览器 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 iventoy VmWare OpenEuler trea idea 安防软件 端口测试 聚类 trae 个人博客 MVS 海康威视相机 Ubuntu22.04 开发人员主页 vpn 我的世界服务器搭建 AI-native Docker Desktop deekseek ABAP wps Deepseek-R1 私有化部署 推理模型 虚拟局域网 Jellyfin Kali 存储维护 NetApp存储 EMC存储 显卡驱动 TrueLicense ArkTs 键盘 分析解读 MacOS 代理服务器 主从复制 超融合 Mac内存不够用怎么办 信号 代码托管服务 金融 sentinel DocFlow 容器技术 rustdesk ubuntu24 vivado24 序列化反序列化 双系统 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 k8s集群资源管理 云原生开发 swoole dns是什么 如何设置电脑dns dns应该如何设置 Ubuntu共享文件夹 共享目录 Linux共享文件夹 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 企业网络规划 华为eNSP 智能音箱 智能家居 GRUB引导 Linux技巧 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos Python基础 Python教程 Python技巧 加解密 Yakit yaklang 代码 对比 工具 meld DiffMerge 远程服务 SVN Server tortoise svn CDN MQTT协议 消息服务器 大模型面经 大模型学习 AnythingLLM AnythingLLM安装 流量运营 x64 SIGSEGV xmm0 su sudo 程序员创富 Typore lio-sam SLAM uv Node-Red 编程工具 流编程 物联网开发 查看显卡进程 fuser 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 基础环境 自学笔记 小米 澎湃OS Android HAProxy IM即时通讯 剪切板对通 HTML FORMAT deployment daemonset statefulset cronjob SEO 读写锁 AI Agent 字节智能运维 rnn keepalived sonoma 自动更新 端口 查看 ss can 线程池 xshell termius iterm2 Unity插件 ssh远程登录 deep learning 影刀 #影刀RPA# 服务网格 istio 内网服务器 内网代理 内网通信 ssh漏洞 ssh9.9p2 CVE-2025-23419 云桌面 微软 AD域控 证书服务器 rag ragflow 源码启动 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? autodl uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 less 实习 合成模型 扩散模型 图像生成 webstorm 浏览器开发 AI浏览器 figma rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 查询数据库服务IP地址 SQL Server 钉钉 HarmonyOS OpenHarmony 真机调试 捆绑 链接 谷歌浏览器 youtube google gmail OpenManus grub 版本升级 扩容 抓包工具 wpf 图形渲染 db 金仓数据库 2025 征文 数据库平替用金仓 宝塔 游戏开发 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 带外管理 sequoiaDB DeepSeek r1 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 人工智能生成内容 eclipse 信创 信创终端 中科方德 DBeaver 数据仓库 kerberos 虚拟显示器 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 sqlite3 prometheus数据采集 prometheus数据模型 prometheus特点 相机 miniapp 调试 debug 断点 网络API请求调试方法 minecraft docker run 数据卷挂载 交互模式 大大通 第三代半导体 碳化硅 TCP协议 java-rocketmq 做raid 装系统 curl wget bat nvm whistle ros milvus 分布式训练 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 考研 在线office QT 5.12.12 QT开发环境 Ubuntu18.04 h.264 程序 webgl RAGFlow 项目部署到linux服务器 项目部署过程 本地知识库部署 DeepSeek R1 模型 CVE-2024-7347 P2P HDLC 环境配置 web3 自动化任务管理 fstab chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 私有化 性能分析 cpp-httplib KylinV10 麒麟操作系统 Vmware log4j iBMC UltraISO MySql aarch64 编译安装 HPC 飞牛nas fnos 本地部署AI大模型 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 IMM 邮件APP 免费软件 spark HistoryServer Spark YARN jobhistory react native python3.11 树莓派 VNC 移动魔百盒 大模型应用 Xinference USB转串口 vr 显示管理器 lightdm gdm harmonyOS面试题 OpenSSH 域名服务 DHCP 符号链接 配置 IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 免费域名 域名解析 seatunnel mq linux上传下载 健康医疗 互联网医院 GIS 遥感 WebGIS deepseek r1 iperf3 带宽测试 Linux的权限 ldap perl 语音识别 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 内网环境 WLAN yaml Ultralytics 可视化 make命令 makefile文件 监控k8s 监控kubernetes 粘包问题 软链接 硬链接 网卡的名称修改 eth0 ens33 triton 模型分析 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors Redis Desktop 镜像 CrewAI HiCar CarLife+ CarPlay QT RK3588 SRS 流媒体 直播 navicat rclone AList webdav fnOS rime 防火墙 NAT转发 NAT Server qemu libvirt top Linux top top命令详解 top命令重点 top常用参数 WebVM 流水线 脚本式流水线 wsgiref Web 服务器网关接口 jina win服务器架设 windows server matplotlib 产测工具框架 IMX6ULL 管理框架 dash 正则表达式 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 迁移指南 并查集 leetcode ardunio BLE 办公自动化 自动化生成 pdf教程 软件卸载 系统清理 llama.cpp 常用命令 文本命令 目录命令 composer Attention 虚幻引擎 nlp AI员工 论文阅读 rpa yolov5 嵌入式系统开发 嵌入式Linux IPC 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 gnu 磁盘清理 PPI String Cytoscape CytoHubba visual studio 渗透 nosql ranger MySQL8.0 kernel docker部署Python 项目部署 MobaXterm 推荐算法 热榜 dock 加速 CentOS MDK 嵌入式开发工具 论文笔记 sublime text 离线部署dify 大模型推理 风扇控制软件 seleium conda配置 conda镜像源 达梦 DM8 西门子PLC 通讯 端口聚合 windows11 稳定性 看门狗 大模型部署 ArtTS ubuntu20.04 开机黑屏 软负载 沙盒 数据库开发 database word js 极限编程 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 鸿蒙开发 移动开发 System V共享内存 进程通信 hosts 解决方案 docker desktop image 搭建个人相关服务器 智能电视 接口优化 k8s二次开发 拓扑图 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 HarmonyOS NEXT 原生鸿蒙 本地化部署 玩机技巧 软件分享 软件图标 macOS 欧标 OCPP 服务器正确解析请求体 多路转接 CentOS Stream kotlin IO Qwen2.5-VL vllm 数字证书 签署证书 yum换源 网络爬虫 搜狗输入法 中文输入法 ros1 Noetic 20.04 apt 安装 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR