15 並發編程-(IO模型)

來源:互聯網
上載者:User

標籤:erro   任務   png   包括   操作   except   append   兩種   sele   

一、IO模型介紹1、阻塞與非阻塞指的是程式的兩種運行狀態

阻塞:遇到IO就發生阻塞,程式一旦遇到阻塞操作就會停在原地,並且立刻釋放CPU資源

非阻塞(就緒態或運行態):沒有遇到IO操作,或者通過某種手段讓程式即便是遇到IO操作也不會停在原地,執行其他動作,力求儘可能多的佔有CPU

2、同步與非同步指的是提交任務的兩種方式:

同步調用:提交完任務後,就在原地等待,直到任務運行完畢後,拿到任務的傳回值,才繼續執行下一行代碼

非同步呼叫:當進程執行到一個IO(等待外部資料)的時候,不需要等待,待資料接收成功後,再回來處理。

 

二、阻塞IO模型

預設情況下,所有的socket都是blocking模型,

實際上,除非特別指定,幾乎所有的IO介面 ( 包括socket介面 ) 都是阻塞型的。

這給網路編程帶來了一個很大的問題,如在調用recv(1024)的同時,線程將被阻塞,在此期間,線程將無法執行任何運算或響應任何的網路請求。

blocking IO的特點就是在IO執行的兩個階段(等待資料和拷貝資料兩個階段)都被block了。

 

 

 

 

三、非阻塞IO模型

 

在非阻塞式IO中,使用者進程其實是需要不斷的主動詢問kernel資料準備好了沒有。

from socket import *server = socket(AF_INET, SOCK_STREAM)server.bind((‘127.0.0.1‘,8083))server.listen(5)server.setblocking(False)print(‘starting...‘)rlist=[]wlist=[]while True:    try:        conn, addr = server.accept()        rlist.append(conn)        print(rlist)    except BlockingIOError:        # print(‘幹其他的活‘)        #收訊息        del_rlist = []        for conn in rlist:            try:                data=conn.recv(1024)                if not data:                    del_rlist.append(conn)                    continue                wlist.append((conn,data.upper()))            except BlockingIOError:                continue            except Exception:                conn.close()                del_rlist.append(conn)        #發訊息        del_wlist=[]        for item in wlist:            try:                conn=item[0]                data=item[1]                conn.send(data)                del_wlist.append(item)            except BlockingIOError:                pass        for item in del_wlist:            wlist.remove(item)        for conn in del_rlist:            rlist.remove(conn)server.close()
View Code

四、多工IO模型

 

五、非同步IO模型六、各種IO模型對比七、瞭解selectors模組的使用

 

15 並發編程-(IO模型)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.