IO

tcp套接字
1.网络缓冲区(协调发送和接收的速度)
2.粘包
udp套接字
服务端  客户端
 
区别  
字节流 
粘包
可靠性
recv  
listen accept
套接字属性
广播 broadcast
http协议(数据的传输)

tcp应用之httpserver

httpserver
功能:接收http请求
     查看http请求
     返回一个网页给客户端

IO  input output
程序一定有io  内存中存在数据交换的操作称为IO操作(输入输出)
eg 内存和磁盘进行数据交换  文件的读写  数据库更新
   内存和终端数据交换  input print sys.stdin  sys.stdout sys.stderr
内存和网络数据的交换:网络连接 recv send recvfrom

IO密集型程序:程序执行中有大量的IO操作,而较少的CPU运算操作
特点:消耗CPU较少,IO运行时间较长

CPU密集型程序:程序中存在大量的CPU操作,IO操作相对较少,消耗CPU大


IO分类
阻塞IO 非阻塞IO IO多路复用  事件驱动IO  异步IO
前三个基本上所有的编程语言都可以

阻塞IO:程序运行中遇到IO条件没有达成或者传输过程比较慢的情况会出现阻塞情况
阻塞IO是最简单的逻辑情形,也是默认状态
阻塞IO是效率最低的IO形态
阻塞情况:
    因为某种IO条件没有达到形成阻塞
        eg accept recv recvfrom input
    处理IO时间的时候耗时较长形成阻塞s
        eg 文件读写过程,网络数据发送过程

非阻塞IO:在程序运行中遇到IO的情形不让其产生阻塞
实现手段:改变IO时间的属性,使其变为非阻塞
通常会和循环一起使用,进行条件的循环监控
sockfd.setblocking(False)
功能:将套接字设置为非阻塞
参数:默认为阻塞状态 设置为false 变为非阻塞

超时检测:
sockfd.settimeout(sec)
功能:设置套接字的超时时间
参数:时间(秒)
select join(timeout)

IO多路复用
定义:通过一个监测,可以同时监控多个IO事件的行为,当哪个IO事件可以执行,即让这个     IO事件发生
IO事件就绪:IO事件即将发生的一个临界状态
1.在程序中存在的IO事件中选择要监测的
2.创建监测,将监测的IO事件注册
3.等待监测的IO事件发生,判断是什么事件
4.处理相应的IO
import select
select   支持Windows和Linux Unix
poll     支持Linux Unix
epoll    支持Linux Unix

rs,ws,xs = select(rlist,wlist,xlist[,timeout])
功能:监控IO事件,阻塞等待监控的IO事件发生
参数:rlist    列表  存放我们需要处理的IO    eg  accept rece
     wlist    列表  存放我们想主动处理的IO
     xlist    列表  存放出错希望去处理的IO
     timeout  超时检测
返回值:rs  列表  rlist准备就绪的IO
       ws  列表  wlist准备就绪的IO
       xs  列表  xlist准备就绪的IO
只要任意一个IO准备就绪,就返回一个返回列表

在处理IO的时候不要形成死循环,让一个客户端单独占有服务端
在IO多路复用形成一种可以同时处理多个IO的效果,效率较高

位运算:按照二进制位进行运算操作
位运算符号:&按位与  |按位或  ^按位异或  <<左移   >> 右移
使用:1.在做底层硬件是操作寄存器
     2.座标志位的过滤

poll方法实现过滤

1.创建poll对象
p = select.poll()
2.注册关注的IO
p.register(sockfd,pollin | pollhup)
p.unregister(sockfd)  取消IO关注
3.监控IO
events = p.poll()
功能:监控关注的IO事件
参数:无
返回值:返回发生的IO事件
events 是一个列表  [(fileno,event),(),()...] (event is in[pollin,pollout])
每个就绪IO对应列表中一个元组:(描述符,就绪事件)
IO地图(通过其找到sockfd):{sockfd.fileno():sockfd}  需要时刻维护
4.处理IO事件

事件类别
pollin   pollout   pollerr   pollhup   pollpri
rlist    wlist     xlist     断开      紧急处理

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值