博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多路复用IO模型 IO multiplexing
阅读量:4349 次
发布时间:2019-06-07

本文共 1518 字,大约阅读时间需要 5 分钟。

多路复用IO模型

就非阻塞IO模型来说,虽然使得CPU处于高并发,但是绝大部分的计算机资源被用反复检测。这样对于少量的用户绝对实在浪费资源。

这是提出多路复用IO模型

多路复用IO模型的结局方案,其实用select模块作为一个检测是否有想要的数据生成,如果没有就去执行其他任务,如果有的话,之前原IO操作。将原来数个accept和recv等这种两个io操作的阻塞变成了select模块。

import selectimport socketserver = socket.socket()server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)server.bind(("127.0.0.1",5555))server.listen(5)server.setblocking(False)#需要检测的是否可以别读取的列表(accept,recv等操作)rlist = [server,]#服务端需要一直被检测是否有客户端,连接#需要检测的是否可以写入的列表,(send操作)wlist = []#需要发送的数据,目前是因为我们要把接受的数据在发送回去dic = {}while True:    rl,wl,xl = select.select(rlist,wlist,[])    for c in rl:        #当检测当rlist中有可以读取的操作(即可以连接对象)        if c == server:            #接受到客户端的连接请求(一个读操作)            conn,addr = c.accept()            #创建的连接添加加入检测列表中去            rlist.append(conn)        else:            #不是服务就是客户端的连接,就可以执行recv            try:                data = c.recv(1024)                if not data:#linux的客户端的错误关闭的                    c.close()                    rlist.remove(c)#将给连接从被检测列表中移除                wlist.append(c)#在正常开发中,不可能必须客户端先发送数据                #服务端才给客户端发送请求                dic[c] = data            except ConnectionResetError:                c.close()                rlist.remove(c)        #处理可以写的socket    for c in wl:        print(c)        try:            c.send(dic[c].upper())            dic.pop(c)            #从检测列表中删除已发送完成的客户端            wlist.remove(c)        except BlockingIOError:            pass

 异步IO简单的提一下

模型

其实上节课讲的异步回调就是解决异步的方案,后期会将asyncio模块。

转载于:https://www.cnblogs.com/msj513/p/9960173.html

你可能感兴趣的文章
HTML—链接
查看>>
将进程设置为守护进程
查看>>
用连接池提高Servlet访问数据库的效率
查看>>
luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )
查看>>
树的数据结构
查看>>
MyEclipse导入Color Theme
查看>>
Vue开发微信H5 微信分享签名失败问题解决方案
查看>>
Linux - 配置SSH免密通信 - “ssh-keygen”的基本用法
查看>>
Python(2.7.6) glob - 匹配指定模式的文件
查看>>
HTTP - 持久连接
查看>>
添加路由时啥时候是dev啥时候是gw
查看>>
redis 中文字符显示
查看>>
登录日志分析常用查询
查看>>
Codeforces Round #228 (Div. 1) 388B Fox and Minimal path
查看>>
【nosql实现企业网站系列之一】mongodb的安装
查看>>
短信服务供应商价格总览
查看>>
获取本机IP(考虑多块网卡、虚拟机等复杂情况)
查看>>
笔记之_java整理ORM框架
查看>>
CentOS下安装python3.x版本
查看>>
CAP定理(原则)以及BASE理论
查看>>