五 IO模型簡介

2022-06-30 12:45:10 字數 1966 閱讀 3714

"""

針對網路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

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)

總結

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

監管機制包括:

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模型之前,給大家舉乙個釣魚的例子。張三去釣魚,他釣魚的時候一動不動,一直看著魚竿,看有沒有動,無論是誰叫他,他都不動,只有等魚梢動了 魚上鉤了 他才會動 李四去釣魚,他沒有像張三那樣瓷楞著,只是時不時的輪詢檢查魚竿有沒有動。一直在動。王五也來釣魚,他就比較聰明了,在魚竿上掛個鈴鐺,只要鈴鐺響...