标签:port 监控 通过 避免 code blocking imp cpu block
IO密集型程序
在程序执行过程中存在大量IO操作,而CPU操作较少,消耗CPU较少,运行效率较低
CPU(计算)密集型程序
在程序执行中,CPU运算较多,IO操作相对较少(消耗CPU大,运行速度快)
IO分类: 阻塞IO
阻塞情况: 是IO的默认形态,是效率较低的一种IO情形
1 因为某种条件没有达成造成的阻塞
accept input recv
2 处理 IO端数据传输时间较长形成的阻塞
网络传输过程,文件读写过程
非阻塞IO : 通过IO事件的属性,使其变成非阻塞状态,(让一些条件阻塞函数不再阻塞)
非阻塞IO往往和循环判断一起使用
s.setblocking(False)
将套接字设置为非阻塞状态(默认为阻塞状态)
超时检测: 将原本阻塞函数,设置一个最长阻塞时间,如果条件时间内达成则正常运行,如果仍然阻塞则被视为超时,继续向下运行或产生异常
s.settimeout(sec) 设置套接字超时时间
IO多路复用 :同时监控多个IO事件,当哪个IO事件准备就绪,就执行哪个IO事件,以此形成可以同时操作多个IO的并发行为,避免一个IO阻塞,造成所有IO都无法执行
IO准备就绪:是一种IO必然发生的临界状态
IO多路复用的编程实现:
1 将IO设置成为关注IO
2 将关注IO提交给内核监视
3 处理内核给我们反馈的准备就绪的IO
具体:select --> windows linux unix
poll -->linux unix
epoll -->linux unix
select 模块:
import select
rs,ws,xs = select(rlist,wlist,xlist[,timeout])
功能: 监控IO事件,阻塞等待IO事件发生
参数:
rlist :列表, 存放我们监控等待处理的IO事件
wlist :列表,存放我们要主动操作的IO事件
xlist :列表: 我们要关注出错处理的IO事件
timeout: 超时时间
返回值 :
rs 列表 rlist中准备就绪的IO
ws 列表 wlist中准备就绪的IO
xs 列表 xlist中准备就绪的IO
注意:
1 wlist中如果有IO事件则select立即返回到ws
2 在处理IO过程中不要处理一个客户端长期占有服务端,使服务端无法运行到select 的情况
3 IO多路复用占用计算机资源少,IO效率高
POLL
1 创建POLL对象
标签:port 监控 通过 避免 code blocking imp cpu block
原文地址:https://www.cnblogs.com/Skyda/p/9606547.html