Python全栈之路系列之IO多路复用

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

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,来找到就绪的描述符。

  • 特点
  1. select最大的缺陷就是单个进程所打开的FD是有一定
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值