
What is IO Multiplexing?
IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。
举例说明
你是一名老师(线程),上课了(启动线程),这节课是自习课,学生都在自习,你也在教室里面坐着,只看着这帮学生,什么也不干(休眠状态),课程进行到一半时,A同学(socket)突然拉肚子,举手说:老湿我要上厕所(read),然后你就让他去了,过了一会,B同学(socket)在自习的过程中有个问题不太懂,就请你过去帮她解答下(write),然后你就过去帮他解答了。
上述这种情况就是IO多路复用,你就是一个IO,那么你解决了A同学的问题和B同学的问题,这就是复用,多路网络连接复用一个io线程。
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。
目前常见支持I/O多路复用的系统调用有 select,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作
What is a select?
select 监视的文件描述符分3类,分别是writefds、readfds和exceptfds,程序启动后select函数会阻塞,直到有描述符就绪(有数据 可读、可写、或者有except),或者超时(timeout指定等待时间,如果立即返回设为null即可),函数返回,当select函数返回后,可以通过遍历fdset,来找到就绪的描述符。
- 特点
- select最大的缺陷就是单个进程所打开的FD是有一定

本文介绍了IO多路复用的概念,通过一个生动的类比解释了其工作原理,并对比了select、poll和epoll三种IO多路复用技术。epoll作为增强版,克服了前两者的一些限制,提供了更高的效率和更少的资源消耗。文中还详细阐述了epoll的边缘触发和水平触发两种模式,展示了epoll在Python中的应用。
最低0.47元/天 解锁文章
71万+

被折叠的 条评论
为什么被折叠?



