五、IO模型简介

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
"""

猜你喜欢

转载自www.cnblogs.com/nuochengze/p/13372747.html