关于C++网络编程中Epoll和套接字阻塞与非阻塞有感
前情提要小编本人是刚开始学C网络编程的学生来记录一下学习笔记大家如果看到有错误请不要吝啬您的指导助力每一位it追梦人我们创建的套接字不管是连接套接字Acceptor_fd还是客户端套接字Client_fd都会放到Epoll中来进行管理Epoll是Linux内核自带的里面有一个红黑树来管理我们的套接字。他最主要的一个功能就是将有事件发生的套接字给返回出来我们一般用一个数组Events来承接这样我们就不需要便利每一个套接字fd了只需要处理这个数组里面的即可。套接字阻塞阻塞就是你用read()的时候如果读缓冲区里面没有数据他就会一直在那里面等着这样我们Events里面的其他套接字就要跟他一直在那里等。如果说客户端连接比较少的情况下还可以考虑那么如果有成千上万个呢这个时候我们就要想办法了。套接字非阻塞非阻塞比阻塞多了一个东西如果缓冲区读取完了会返回一个EAGIN我们只许哟啊加上一个判断if (errno EAGAIN || errno EWOULDBLOCK)这样我们就读完数据就可以安全的退出了不影响其他的fd处理。Epoll水平触发LT水平触发坦白说就是他会一直通知你如果你没有把数据读完下一次调用epoll_wait()时会立即返回再次告诉你这个 fd 可读也就是“持续通知”Epoll边缘触发ET边缘触发相对于水平触发他只会通知你一次即使缓冲区里面还有数据也不会再次通知你所以你需要保证他通知你一次然后你一次性的把数据给拿完。因为我们用到ET他只会通知一次你必须得循环的去取数据如果你用阻塞的话缓冲区没有数据它会一直阻塞在那里所以我们的ET必须搭配非阻塞这在下边也会有提到。经典配合1LT阻塞 如果说在我么们平常的学习当中客户端非常的少并发量比较小的情况下可以使用代码最简单线性逻辑。AI给出的连接数量建议是500经典配合2 ET非阻塞优点就是每个事件只通知一次在成千上万的高并发服务器中大大减少了通知的次数但是这个需要我们的代码复杂度比较高.AI给出的连接数量建议是10000配合3LT非阻塞适合中等数量的连接只开一个线程但是通知次数多。AI给出的连接数量建议是500~2000重点 阻塞因为read会卡在那里等待缓冲区有数据所以需要有几个连接就开几个线程但是线程熟练后膨胀会导致cpu调度崩溃内存爆炸不建议这样。如果是LT就无所谓读一次就可以退出反正epoll会产生事件。心得体会1.使用LT阻塞与非阻塞无所谓2.使用ET必须配合非阻塞循环read3.使用阻塞在循环read的时候必须要每个连接单开线程多线程4.使用非阻塞单线程处理处理多连接多线程也可以没有必要这四条是小编总结的黄金法则总结ET比LT高效因为通知的次数大幅度降低。非阻塞比阻塞灵活因为它不会在那里死等。具体情况还需要具体讨论情况复杂多变。

相关新闻

Unity CJ Lib工具库:数学几何算法与随机数生成实战指南

Unity CJ Lib工具库:数学几何算法与随机数生成实战指南

1. 项目概述:Unity CJ Lib 是什么,以及为什么你需要它 如果你在Unity开发中,尤其是涉及到一些底层数学计算、几何处理或者需要一套现成的、经过验证的工具库时,还在重复造轮子,那今天聊的这个开源项目可能就是你一直在…

2026/8/9 5:35:08 阅读更多 →
stat命令详解

stat命令详解

stat 是一个用于显示文件或文件系统详细状态信息的命令行工具--1。与 ls -l 相比,它能提供更全面、更底层的元数据(Metadata),如文件大小、权限、所有者、各种时间戳、inode 号码等-。 📝 命令语法与常用选项 stat 命…

2026/8/7 13:07:06 阅读更多 →
Planner-Executor架构:构建可落地的多智能体协作系统

Planner-Executor架构:构建可落地的多智能体协作系统

1. 项目概述:当“会议总指挥”不再需要你盯每一封邮件 你有没有过这种体验:手头同时推进三个项目,每个都卡在不同环节——市场部催着要活动方案,技术团队发来API接口文档说“等你确认”,法务又甩过来一份合同草案标注了…

2026/8/7 23:19:37 阅读更多 →

最新新闻

如何用NucleusCoop实现单机分屏游戏:免费开源终极教程

如何用NucleusCoop实现单机分屏游戏:免费开源终极教程

如何用NucleusCoop实现单机分屏游戏:免费开源终极教程 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾经梦想过,只…

2026/8/9 10:45:55 阅读更多 →
Android 生命周期管理 - Lifecycle流程

Android 生命周期管理 - Lifecycle流程

class LifecycleDemo1Observer : DefaultLifecycleObserverlifecycle.addObserver(LifecycleDemo1Observer())这句话是怎么做到生命周期管理的?这两行代码是 Android Architecture Components(AAC) 中 Lifecycle 组件 的核心用法。下面我从涉…

2026/8/9 10:45:55 阅读更多 →
MySQL EXPLAIN详解:SQL性能分析与优化实战

MySQL EXPLAIN详解:SQL性能分析与优化实战

1. 为什么我们需要EXPLAIN第一次接触MySQL的EXPLAIN是在五年前的一个深夜,当时我负责的电商平台突然出现查询超时。面对一个看似简单的订单查询SQL,我完全不明白为什么它会拖垮整个数据库。直到一位前辈提醒我:"用EXPLAIN看看执行计划&q…

2026/8/9 10:45:55 阅读更多 →
Git Explain TUI:用AI对话式交互重构代码理解与考古工作流

Git Explain TUI:用AI对话式交互重构代码理解与考古工作流

你有没有过这样的经历:盯着一段 Git 提交历史,看着那些简短的提交信息,试图理解几个月前自己或同事写下的代码变更到底是为了什么?或者,在代码评审时,面对一个复杂的diff,需要花费大量时间逐行阅…

2026/8/9 10:45:55 阅读更多 →
任务知识该写进提示词还是微调进权重?KV-Skill 外挂算子把 4B 模型准确率从 23.4 拉到 77.2

任务知识该写进提示词还是微调进权重?KV-Skill 外挂算子把 4B 模型准确率从 23.4 拉到 77.2

【技术解读】本文深度解析密歇根大学安娜堡分校提出的 KV-Skill 外挂算子:把任务技能从提示词文本编译成模型可直接读取的低秩算子 M_s W_sU_sᵀ,经一条独立残差旁路注入冻结骨干——既不占用提示词 token 位置,也不写入注意力 KV Cache。Qw…

2026/8/9 10:45:54 阅读更多 →
在线Excel- XuY_Sheet - 功能完整的电子表格应用,吊打luckysheet

在线Excel- XuY_Sheet - 功能完整的电子表格应用,吊打luckysheet

📊 在线Excel- XuY_Sheet - 功能完整的电子表格应用,吊打luckysheet 🚀 产品概述 在线Excel 是一款基于Web的轻量级电子表格工具,无需安装任何软件,打开浏览器即可使用。它完美兼容主流表格文件格式,提供与…

2026/8/9 10:44:54 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →