IO多路复用
Linux有三种方式实现IO多路复用,分别是 Select, poll和 epoll,但windows 只支持 Select。Select是最早的IO 多路复用技术,后来才有的poll,之后才有 epoll
Select 有一个限制,就是只能支持1024个以内的文件描述符,超出的话就没法监听了。是通过 for 循环实现的。 poll也是类似的,但没有1024个显示。
epoll是通过异步的方式实现的,底层的描述符谁有变化了,谁告诉 epoll,不用程序去做for循环去看描述符的变化了。
Select IO 多路复用示例
以python程序为例,socket 监听了8001和8002两个端口,使用 select.select 来查看这两个 socket的状态,一旦文件描述符发生变化,就会将变动传送给 r_list 里,其中 e_list 是指有错误的话,会发到这里。select.select 接收的4个参数,第一个指的是,监听哪个list的变化,第二个参数是永久固定的将这个list返回给 w_list,第三个参数指的是有错误发给 e_list,最后一个1指的是每隔1秒检查一次。
最后更新于