IO多路复用
IO多路复用是一种同步IO模型,旨在实现一个线程可以监视多个文件句柄。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作。没有文件句柄就绪就会阻塞应用程序,交出CPU。多路是指网络连接,复用指的是同一个线程。
多路复用有三种实现方式:
1、select实现
select仅仅知道有IO发生了,但并不知道是哪个或哪些流。只能轮询所有流,找出能读出数据或者写入数据的流,对它们进行操作。复杂度是O(n),同时处理的流越多,轮询时间就越长。
select的缺点:
单个进程能打开的fd数量是有限制的,通过fd_setsize设置,默认是1024。
每次调用select,都要把fd集合从用户态拷贝到内核态,在fd很多时开销很大。
轮询性能太低。
2、poll实现
poll本质上和select没有区别,但它没有最大连接数的限制。
3、epoll实现
epoll就比较牛逼了,epoll可以被理解为event poll,即事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到readyList里面,时间复杂度O(1)。fd是file descriptor,文件描述符。
epoll的优点:
没有最大连接数的限制,能打开的fd数远大于1024。
效率提升,不是轮询的方式,不会随着fd数目的增加效率下降。只有活跃可用的fd才会调用callback函数,即epoll只关心活跃的连接,而不关心连接总数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】