关于C++网络编程中Epoll和套接字阻塞与非阻塞有感

发布时间:2026/7/19 3:34:06

关于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工具库:数学几何算法与随机数生成实战指南

2026/7/19 3:34:06

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

stat命令详解

stat命令详解

2026/7/19 3:34:06

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

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

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

2026/7/19 3:34:06

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

2026深度测评10款降AI率网站红黑榜!优劣对比全解析,达标率硬刚行业巅峰

2026深度测评10款降AI率网站红黑榜!优劣对比全解析,达标率硬刚行业巅峰

2026/7/19 6:44:16

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生

OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生

2026/7/19 6:44:16

OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方抛弃的老旧Mac&a…

RFID资产管理系统实施后:三个容易被忽视的长期管理问题

RFID资产管理系统实施后:三个容易被忽视的长期管理问题

2026/7/19 6:44:16

当RFID资产管理系统顺利上线、首次盘点高效完成、各方都松了一口气之后,另一个阶段才刚刚开始。系统的长期运行,往往会遇到一些在选型和实施阶段不太容易被预见的问题。它们不是技术故障,而是随着时间推移逐渐显现的管理挑战。提前了解这些问…

3步轻松解锁AI-Shoujo完整功能:高效游戏增强工具深度解析

3步轻松解锁AI-Shoujo完整功能:高效游戏增强工具深度解析

2026/7/19 6:44:16

3步轻松解锁AI-Shoujo完整功能:高效游戏增强工具深度解析 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch 想要让AI-Shoujo游戏体验更上一层楼&#xff1f…

Flutter跨平台开发入门:从环境搭建到基础组件

Flutter跨平台开发入门:从环境搭建到基础组件

2026/7/19 6:44:16

1. Flutter是什么?为什么选择它?Flutter是Google推出的开源UI工具包,用于构建跨平台的移动、Web、桌面和嵌入式应用。它最大的特点是"一次编写,到处运行"——开发者可以用同一套代码构建iOS、Android、Web等多个平台的应…

C#实现SMTP邮件发送功能详解与最佳实践

C#实现SMTP邮件发送功能详解与最佳实践

2026/7/19 6:34:16

1. C#邮件发送功能概述在C#应用程序中实现邮件发送功能是常见的业务需求,无论是系统通知、验证码发送还是报表推送,邮件服务都扮演着重要角色。.NET框架提供了System.Net.Mail命名空间下的SmtpClient类来简化SMTP协议交互,让开发者能够快速集…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/19 0:03:49

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/19 0:03:49

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/19 0:03:49

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/19 0:03:49

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/19 0:03:49

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/19 0:03:49

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…