1、IO模型简介
""" 针对网络IO """ """ * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO * asynchronous IO 异步IO """
2、图解
3、IO多路复用
3.1 使用方式
# 服务端 import socket import select """ 当监管的对象只有一个的时候,IO多路复用连阻塞IO都比不上 但是IO多路复用可以一次性监管很多个对象 监管机制是操作系统本身就有的,如select """ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(("127.0.0.1", 8888)) server_socket.listen(5) server_socket.setblocking(False) # 设置为非阻塞 read_list = [server_socket] # 添加server_socket到监管的队列中 while True: r_list, w_list, x_list = select.select(read_list, [], []) for i in r_list: # 针对不同的对象,做不同的处理 if i is server_socket: client_socket, addr = i.accept() # 添加到监管的队列中 read_list.append(client_socket) else: res = i.recv(1024) if len(res) == 0: i.close() # 将无效的监管对象 移除 read_list.remove(i) continue print(res) i.send(b'test-test-test') # 客户端 import socket client = socket.socket() client.connect(("127.0.0.1", 8888)) while True: client.send(b'hello world') data = client.recv(1024) print(data)
3.2 总结
总结 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 监管机制包括: select机制 windows linux都有 poll机制 只有linux有, poll和select都可以监管多个对象,但是poll监管的数量更多 epoll机制 只在linux有,它给每个监管对象都绑定了一个回调机制, 一旦有响应,回调机制立刻发起提醒 针对不同的操作系统需要考虑不同的检测机制,避免书写太多代码 selectors机制
4、异步IO
""" 异步IO模型是所有模型中效率最高的,也是使用最广泛的 相关的模块和框架 模块:asyncio模块 异步框架:sanic tronado twisted """