select poll epoll总结区别
最下边是别人的文章,写的非常好。其中有几点摘出来再细说下:
select poll归为一类说:
1.select和poll区别是文件描述符数量多少差别,select 用数组记录套接字,poll用的链表。本质没啥区别的。找几个代码例子就能看出来。
2.select和poll相同点,都是轮循,比如有1000个需要监控的TCP连结,同一时间活跃的有10个,那么他们会把1000个套接字标志传到内核,内核遍历1000遍,发现有10个活跃的,修改这10个套接字中状态为可读。然后再传到用户进程遍历1000遍,看看哪个套接字对的状态为可读的。
可以看出,效率低的2点: (1)每次循环3000次,(2)每次拷贝2000个
3.关于这一点:s触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次调用还是会将这些文件描述符通知进程。
做游戏服务器的一般不存在这点。
epoll 归为一类,是如何解决select和poll 效率低的问题呢?
1.epoll监控tcp连接用的红黑树,添加到内核后,不需要再次添加重复连接。如果继续用上边的数据例子,那么(1)一共循环1000 Log1000 ,加上 每次活跃的 10个 (2)每次拷贝10个
2.每帧检测活跃的套接字会放到双列表里,送到用户进程也就10个
深度理解select、poll和epoll_傻眼哥的博客-CSDN博客
如果这篇文章说不清epoll的本质,那就过来掐死我吧! (1) - 知乎 (zhihu.com)
当你看完这两篇文章时回答这几个问题:
1.当网络数据到达时,网卡发送中断信号给CPU,然后进行数据分类拷贝到对应的套接字,然后唤醒进程A。问题:怎么知道这个套接字属于哪个进程呢?或者说CPU怎么知道应该唤醒进程A,而不是B呢?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?