IO多路复用(Python)
1. select:
监听多个文件描述符(当文件描述符条件不满足时,select会阻塞),当某个文件描述符状态改变后,将该文件描述符添加到对应返回的列表
调用:
fd_r_list, fd_w_list, fd_e_list
=
select.select(rlist, wlist, elist, [timeout])
参数:三个序列、一个超时时间
- rlist: wait until ready for reading
- wlist: wait until ready for writing
- elist: wait for an “exceptional condition”
- timeout: 超时时间,超时时间为空,则select会一直阻塞,直到监听的句柄发生变化
返回值:三个列表
- 当rlist序列中的fd满足“可读”条件时,则获取发生变化的fd并添加到fd_r_list中
- 当wlist序列中含有fd时,则将该序列中所有的fd添加到 fd_w_list中
- 当elist序列中的fd发生错误时,则将该发生错误的fd添加到 fd_e_list中
缺点:
- 事件循环中只要select监听的满足条件的fd状态发生改变,就会调用select函数,此过程需要将监听的所有fd从用户态拷贝到内核态,随监听的fd数量增加开销增大
- select只能知道有fd变化,却不知道具体是谁,所以需要遍历所有fd,当fd数量很大时,开销增大
- select可监听的fd最大数量有限制(1024)
优点:
跨平台(windows、unix、linux都能用)
2. poll(过渡):
优点:
解决了select监听最大数量限制的问题
3. epoll:
优点:
解决大量并发连接中少量活跃情况下系统CPU利用率问题(
- epoll_create创建epoll句柄
- epoll_ctl注册/删除待监听事件
- epoll_wait等待事件产生
)
- epoll_ctl每次注册新的事件到epoll句柄中时,会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝,保证了每个fd在整个过程中只会拷贝一次
- epoll_ctl遍历fd,为每个fd指定回调函数,客户端就绪,唤醒等待队列的等待者,调用回调函数把就绪的fd加到就绪链表,epoll_wait直接遍历就绪链表查看就绪的fd
- 没有最大监听数量限制
*水平触发、边缘触发
水平触发:电信号为0或1时触发;即只要满足某个条件就触发(监听的fd有可读写事件发生,但未读写完,下次还会通知)--select、epoll
边缘触发:电信号由0变为1时触发(或1变为0);即状态变化时触发(监听的fd有可读写事件发生,但未读写完,下次不会通知,除非再有新的读写状态变化时触发)--epoll
IO多路复用(Python)的更多相关文章
- python网络编程——IO多路复用之select
1 IO多路复用的概念 原生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收发数据(调用recv.send.sendall)时也是阻塞的.原生so ...
- 【python】-- IO多路复用(select、poll、epoll)介绍及实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- 39 - 同步-异步-IO多路复用
目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...
- IO多路复用(select、poll、epoll)介绍及select、epoll的实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- Python(七)Socket编程、IO多路复用、SocketServer
本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...
- python中的IO多路复用
在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...
- socket_server源码剖析、python作用域、IO多路复用
本节内容: 课前准备知识: 函数嵌套函数的使用方法: 我们在使用函数嵌套函数的时候,是学习装饰器的时候,出现过,由一个函数返回值是一个函数体情况. 我们在使用函数嵌套函数的时候,最好也这么写. def ...
- python之IO多路复用
在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...
- 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】
下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...
- python运维开发(十)----IO多路复用线程基本使用
内容目录: python作用域 python2.7和python3.5的多继承区别 IO多路复用 socketserver模块源分析 多线程.进程.协程 python作用域 python中无块级作用 ...
随机推荐
- java2周来的一些心得和体会
1.首先,在开发的一开始,可以将绝大多数rest可能提交过来字段先抽离出来,做成一个基础类. 然后再继承这个类,这样做的好处是业务就被分开了,谁也不会影响到谁. 2.在maven当中,需要修改自己的类 ...
- unsigned int reverse_bit(unsigned int value);
/*编写函数 unsigned int reverse_bit(unsigned int value); 这个函数的返回值吧value的二进制位模式从左到右翻转后的值. 如在32位机器上25这个值包含 ...
- SQLalchemy 字段类型
常用的SQLAlchemy列选项 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigIntege ...
- Codeforces 977E:Cyclic Components(并查集)
题意 给出nnn个顶点和mmm条边,求这个图中环的个数 思路 利用并查集的性质,环上的顶点都在同一个集合中 在输入的时候记录下来每个顶点的度数,查找两个点相连,且度数均为222的点,如果这两个点的父节 ...
- springCloud、springBoot学习
http://projects.spring.io/spring-cloud/ 官网https://springcloud.cc/spring-cloud-netflix.htmlhttp://cl ...
- php中include和require的区别(整理)
require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 requi ...
- 浅谈兔兔对Object.defineProperty的理解
给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象 语法: Object.defineProperty(参数1,参数2,参数3) 参数1:目标对象 参数2:要修改或者添加的属性名称 ...
- 爬虫模块介绍--Beautifulsoup (解析库模块,正则)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- mysql(linux下)bug集结
Mysql 启动测试: # systemctl status mysqld.service
- PowerShell 知识点总结