基於IO多路複用,windows中使用select實現,linux中使用select,pool,epoll實現。python
windows中使用select,最多能監聽1024個文件句柄,使用輪詢檢測;linux
Linux中使用select最多能監聽1024個文件句柄,使用輪詢檢測;pool,監聽個數不限制;epoll使用邊緣觸發,回調通知windows
官方定義:幫助開發者監聽多個IO句柄發生變化,用於幫助咱們監聽多個socket是否發生變化(鏈接服務器的socket,和發送消息的socket)服務器
爲何使用IO多路複用:在單線程中,因爲咱們使用服務端與多個客戶端收發消息時,因爲python的代碼是由上往下執行的,所以當服務端和第一個客戶端收發消息時,服務端會處於accept這個狀態,這樣會形成等待,第二個客戶端確定不能和服務端進行交互,爲了解決這個問題,引出了IO多路複用。socket
import socket import select #能夠鏈接不少個用戶 sk1=socket.socket() sk2=socket.socket() sk1.bind(('127.0.0.1',8001)) sk2.bind(('127.0.0.1',8002)) while True: rlist,w,e=select,select([sk1,conn1,conn2],[],5) for sk in rlist: if sk==sk1: # 服務端socket發生變化,新用戶來鏈接 conn,addr=sk.accept() conn.send('hello') else: # 客戶端socket發生變化,老用戶發來了消息 data=sk.recv()