"""針對網路io
""""""
* blocking io 阻塞io
* nonblocking io 非阻塞io
* io multiplexing io多路復用
* signal driven io 訊號驅動io
* asynchronous io 非同步io
服務端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()
#新增到監管的佇列中
else
: res = i.recv(1024)
if len(res) ==0:
i.close()
#將無效的監管物件 移除
read_list.remove(i)
continue
(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)
總結>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
監管機制包括:
select機制 windows linux都有
poll機制 只有linux有, poll和select都可以監管多個物件,但是poll監管的數量更多
epoll機制 只在linux有,它給每個監管物件都繫結了乙個**機制, 一旦有響應,**機制立刻發起提醒
針對不同的作業系統需要考慮不同的檢測機制,避免書寫太多**
selectors機制
"""非同步io模型是所有模型中效率最高的,也是使用最廣泛的
相關的模組和框架
模組:asyncio模組
非同步框架:sanic tronado twisted
"""
五種網路IO模型簡介
linux的socket在預設情況都是阻塞的,當使用者程序請求讀取網路資料的時候,如果資料還沒有到達,程序就會被阻塞,一直等到資料到達,並且資料從kernel拷貝到使用者程序的記憶體後,才會解除阻塞狀態,重新開始執行。當使用者程序請求讀取資料的時候,如果資料還沒準備好,kernel會立即返回乙個er...
Unix下五種IO模型簡介
阻塞式io 阻塞式io模型是最一般的io模型。在這種模型下,io函式呼叫 read write等等 都會在操作完成或者發生中斷以後才會返回。如果指定的運算元據沒有就緒,或者操作需要的外部條件 比如緩衝區 尚未符合要求,操作會一直阻塞。非阻塞式io 相對於阻塞式io模型,非阻塞式io的特點就是 當所請...
五種IO模型
再講io模型之前,給大家舉乙個釣魚的例子。張三去釣魚,他釣魚的時候一動不動,一直看著魚竿,看有沒有動,無論是誰叫他,他都不動,只有等魚梢動了 魚上鉤了 他才會動 李四去釣魚,他沒有像張三那樣瓷楞著,只是時不時的輪詢檢查魚竿有沒有動。一直在動。王五也來釣魚,他就比較聰明了,在魚竿上掛個鈴鐺,只要鈴鐺響...