五、IO模型簡介
阿新 • • 發佈:2020-07-24
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 """