1. 程式人生 > 實用技巧 >五、IO模型簡介

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