IO

IO: input output

在内存中存在数据交换的操作

内存和磁盘交换 文件读写 打印

内存和网络交换 上传、下载

 

从程序角度分类:

IO密集型程序:程序中执行大量的IO操作,而较少需要cpu运算,消耗cpu资源少,运行周期往往较长

Cpu密集型程序:程序执行中需要大量的cpu运算,IO操作较好。占用CPU多

 

IO分类:

 

阻塞IO:默认形态 是效率最低的一种IO

阻塞:因为等待某种条件达成再继续运行,accept 、recv、input

处理IO事件的时候耗时较长也会产生阻塞,例如:文件的读写过程,网络数据的传输过程

 

非阻塞IO:通过修改IO对象使其变为非阻塞状态,只能修改上面第一种阻塞形态

通过用循环不断判断阻塞条件,需要消耗更多cpu但一定程度上提高了IO效率

 

超时等待(检测)

s.settimeout()

功能:设置套接字的超时检测

参数:超时时间

所谓超时检测即对原本阻塞的函数进行设置,使其不再始终阻塞,而是等待阻塞一段时间后自动返回。在规定时间中如果正常结束阻塞则继续执行否则产生timeout异常

select   join   wait中的参数就是timeout时间

 

cookie

 更专业的打印异常信息

import traceback

trace.print_exc()

IO多路复用

定义:同时监控多个IO事件,当哪个IO事件准备就绪就执行哪个IO事件,形成并发的效果

import select

select------支持win linux unix

poll---------支持linux、unix

epoll

 

r,w,x=select(rlist,wlist,xlist,[timeout])

功能:监控IO事件,阻塞等待IO事件发生

参数:rlist  列表   存放我们要监控等待处理的IO

           wlist   列表    存放我们希望主动处理的IO

           xlist     列表     存放如果发生异常需要我们需要处理的

           timeout      数字    超时检测,可选参数,默认是一直阻塞

返回值:

          r    列表      rlist中准备就绪的IO

         w    列表      wlist中准备就绪的IO

         x     列表      xlist中准备就绪的IO

IO多路复用注意点:

1、在处理IO过程中不应发生死循环(某个IO单独单独占有服务器)

2、io多路复用是单进程程序,是一个并发程序

3、io多路复用有较高的IO执行效率

poll

1、创建poll对象

p=select.poll()

2、加入关注的IO

p.register(s)

3、使用poll函数监控

events=p.poll()

poll io事件

POLLIN     POLOUT     POLLUP      POLLERR      POLLPRI       POLLVAL

rlist             wlist             断开连接     xlist              紧急处理        无效数据

s & POLLIN判断事件是否发生

4、处理发生的IO事件

 

 

事件驱动IO

异步IO

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值