Skr-Eric的网络编程课堂(五)-- IO多路复用、poll、epoll和本地套接字

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

 

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效率高

 

位运算

 

整数按照二进制位进行运算

& 按位与   | 按位或   ^ 按位异或

<< 左移   >> 右移

 

11    1011

14    1110

 

&     1010    一0则0

|     1111    一1则1

^     0101    相同为0不同为1

 

11 << 2   101100  

14 >> 2   11

 

poll

 

1.创建poll对象

p = select.poll()

2.添加注册事件

p.register(s,POLLIN | POLLERR)

 

POLLIN   POLLOUT  POLLERR  POLLHUP  POLLNVAL

rlist    wlist    xlist    断开     无效数据

 

p.unregister(s) 从关注事件中移除

 

3. 阻塞等待IO发生

events = p.poll()

功能 : 阻塞等待IO发生

返回值 : events 是一个列表,列表中给每一个元素都是一个元组,代表一个发生的IO事件

[(fileno,                event),(),()....]

就绪IO的文件描述符    具体就绪事件

 

* 需要通过文件描述符(fileno)找到对应的IO对象

  {s.fileno() : s}

 

4. 处理具体的IO

 

epoll方法

 

使用方法:基本与poll方法相同

* 将生产对象 poll() 改为epoll()

* 将所有poll对象事件改为epoll对象事件

 

区别 :

epoll 的效率要比 poll和select 高

epoll 的事件触发方式更多

 

本地套接字

 

linux 文件

b(块设备文件) c(字符设备文件) d(目录)

-(普通文件) l(链接) s(套接字) p(管道)

 

作用:用于本地不同的程序间进行通信

 

创建流程

1.创建本地套接字

sockfd = socket(AF_UNIX,SOCK_STREAM)

2.绑定本地套接字文件

   * 选定文件位置和名称

   * sockfd.bind(path)

3. 监听  listen()

4. 消息收发, recv  send

 

cookie

os.path.exists(path)

功能 : 判断一个文件是否存在

参数:目标文件

返回值 : 存在返回True 否则 False

 

os.remove()  os.unlink()

功能 : 删除一个文件

参数 : 目标文件

 

 

 

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值