腾讯面试官:“epoll凭啥碾压select?”,我答完红黑树+事件通知,他点头:“继续说。”,我说:“没了,就这些。。” 📅 发布时间:2026/7/8 22:36:48 👁️ 浏览次数: 面试官的心思猜不透先把epoll的原理装进脑子里吧。以下为知识星球 录友分享的徐工研究院一面问题epoll为什么比select/poll高效下文知识拓展部分提供了演示图例)简要回答epoll高效的核心原因事件驱动只返回就绪的文件描述符无需遍历所有fd内核回调通过回调机制通知就绪事件O(1)时间复杂度共享内存避免用户空间和内核空间的数据拷贝水平触发与边缘触发提供更灵活的事件通知模式详细回答三种I/O多路复用机制对比select 的问题线性扫描每次调用需要遍历所有fdO(n)时间复杂度fd_set大小限制通常1024个文件描述符内存拷贝每次调用都需要在用户空间和内核空间拷贝fd_set重复初始化每次调用后需要重新设置监控的fdpoll 的改进链表结构突破1024限制使用pollfd数组但仍有性能问题仍然需要遍历所有fdO(n)时间复杂度内存拷贝同样需要拷贝整个pollfd数组epoll 的高效设计 红黑树存储高效的fd管理插入删除O(log n)就绪链表只返回就绪的fd无需遍历所有fd事件回调内核通过回调机制直接通知就绪事件内存共享epoll_ctl和epoll_wait共享内核数据结构边缘触发避免重复通知提高性能epoll 核心原理epoll_create创建epoll实例返回epoll文件描述符epoll_ctl向epoll实例中添加/修改/删除监控的fdepoll_wait等待I/O事件发生只返回就绪的fd列表代码示例public: bool start(int port) { // 创建服务器socket server_fd socket(AF_INET, SOCK_STREAM, 0); if (server_fd 0) returnfalse; // 设置端口复用 int opt 1; setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, opt, sizeof(opt)); // 绑定地址 sockaddr_in addr{}; addr.sin_family AF_INET; addr.sin_port htons(port); addr.sin_addr.s_addr INADDR_ANY; if (bind(server_fd, (sockaddr*)addr, sizeof(addr)) 0) { close(server_fd); returnfalse; } // 监听 if (listen(server_fd, 128) 0) { close(server_fd); returnfalse; } // 创建epoll实例 epoll_fd epoll_create1(0); if (epoll_fd 0) { close(server_fd); returnfalse; } // 添加服务器socket到epoll epoll_event ev{}; ev.events EPOLLIN; // 监听可读事件 ev.data.fd server_fd; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_fd, ev) 0) { close(epoll_fd); close(server_fd); returnfalse; } returntrue; }知识拓展水平触发 vs 边缘触发水平触发LTfd就绪时持续通知直到数据被处理完 编程更简单不容易遗漏事件 可能产生不必要的重复通知边缘触发ET只在fd状态变化时通知一次 需要一次性处理完所有数据 性能更高但编程更复杂 必须使用非阻塞I/Oepoll 的局限性仅限LinuxWindows不支持文件描述符类型限制不支持普通文件内存占用每个epoll实例需要内核资源小连接数场景可能不如select/poll高效使用场景高并发网络服务器Web服务器、游戏服务器实时通信系统聊天服务器、视频会议代理服务器Nginx、HAProxy数据库连接池管理大量数据库连接文件服务器处理大量文件I/O任何需要处理大量并发连接的场景知识图解面试官很能追问Q1epoll的边缘触发模式为什么要用非阻塞I/OA1 边缘触发只通知一次必须一次性读取所有可用数据如果使用阻塞I/O读取时可能会阻塞导致其他fd饿死非阻塞I/O确保读取到EAGAIN/EWOULDBLOCK时立即返回避免进程阻塞保证所有就绪fd都能及时处理Q2epoll如何避免惊群效应A2惊群效应多个进程/线程等待同一个fd事件发生时全部被唤醒解决方案 EPOLLEXCLUSIVE标志Linux 4.5确保只有一个epoll实例被唤醒SO_REUSEPORT内核级别负载均衡应用层同步使用互斥锁控制只有一个worker处理连接单线程accept 多线程处理Q3epoll和select的文件描述符限制A3 selectFD_SETSIZE限制通常1024编译时确定poll理论上无限制但性能随fd数量线性下降epoll只与系统内存有关通常支持数十万fd 查看限制cat /proc/sys/fs/file-maxhttps://mp.weixin.qq.com/s/AX1oyW_RbQTwWo7uNSOyPA
字节芯片团队启动规模化招聘,附重要岗位职责 大家好我是肖遥,身处芯片行业十来年,感觉现在是AI芯片的好时机,也就在2月14日,情人节这天,科技圈传来一则比玫瑰更扎眼的消息——字节跳动芯片研发团队即将开启规模化招聘,覆盖北京、上海、深圳等核心科技城… 2026/7/7 11:04:25
深度测评!万众偏爱的一键生成论文工具 —— 千笔写作工具 你是否曾为论文选题发愁,反复修改却总对结果不满意?面对庞大的文献资料不知从何下手,格式排版总出错,查重率又屡屡不通过?这些学术写作的“经典难题”是否让你倍感焦虑?别再独自挣扎,现在有了一… 2026/5/17 5:06:27
Pi0具身智能软件测试实战:自动化测试框架搭建 Pi0具身智能软件测试实战:自动化测试框架搭建 1. 引言 在具身智能快速发展的今天,机器人系统的复杂性和智能化程度不断提升,如何确保这些系统在实际应用中的稳定性和可靠性成为了关键挑战。Pi0作为业界领先的具身智能平台,其软件… 2026/7/8 18:37:44
直流、步进、伺服电机选型指南:从核心原理到工程实践 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个电机选型的技术话题。对于很多工程师、学生和爱好者来说,面对直流电机、步进电机、伺服电机这些名词&… 2026/7/8 22:36:23
AI漫剧技术解析:从《凤九歌》看3D动画生成与口型同步 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 AI漫剧《凤九歌》作为近期热门的3D古风AI生成剧,展现了AI在影视制作领域的技术突破,同时也暴露了算法创作面临… 2026/7/8 22:36:23
PyTorch 2.0+ 深度学习调参实战:AdamW + Cosine 退火策略在 CV 任务中的 5 个关键参数 PyTorch 2.0 深度学习调参实战:AdamW与Cosine退火策略的工程化实践 1. 深度学习调参的本质与挑战 在计算机视觉任务中,模型性能的瓶颈往往不在于架构创新,而在于超参数的系统性优化。PyTorch 2.0引入的编译优化和计算图改进,使得… 2026/7/8 22:32:18
PyTorch 2.0 线性回归实战:从 15 个样本到 60 轮训练,Loss 降至 0.001 PyTorch 2.0 线性回归实战:15样本60轮训练实现Loss0.001的完整指南 1. 线性回归与PyTorch基础认知 线性回归作为机器学习领域的"Hello World",其核心思想是通过线性方程ywxb拟合数据分布。PyTorch 2.0通过动态计算图和自动微分机制࿰… 2026/7/8 22:32:18
从残差分析到模型优化:线性回归的4个实战陷阱与解决方案 从残差分析到模型优化:线性回归的4个实战陷阱与解决方案在数据科学项目中,线性回归模型往往是最先被尝试的算法,但也是最容易被低估的建模工具。许多分析师在模型表现不佳时,第一反应是转向更复杂的算法,却忽略了线性回… 2026/7/8 22:30:17
PInVerify:具身AI实例级指代验证离线基准 1. 项目概述:这不是又一个“刷榜”数据集,而是一把量尺如果你最近在具身AI(Embodied AI)领域泡得久,大概率已经听过“物理AI”和“具身智能”这两个词被反复提起,甚至有人开始混淆——前者强调系统与真实物… 2026/7/8 22:28:15
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08