Python學習筆記__20章 異步IO

# 這是學習廖雪峯老師python教程的學習筆記

1、概覽

CPU的速度遠遠快於磁盤、網絡等IO。

    1)同步IO

一旦遇到IO操作,如讀寫文件、發送網絡數據時,就需要等待IO操作完成,才能繼續進行下一步操作,在IO操作的過程中,當前線程被掛起,而其他需要CPU執行的代碼就無法被當前線程執行了。

因爲同步IO的原因,我們必須使用多線程或者多進程來併發執行代碼,爲多個用戶服務。每個用戶都會分配一個線程,如果遇到IO導致線程被掛起,其他用戶的線程不受影響

由於我們要解決的問題是CPU高速執行能力和IO設備的龜速嚴重不匹配,多線程和多進程只是解決這一問題的一種方法

do_some_code()

f = open('/path/to/file', 'r')

r = f.read() # <== 線程停在此處等待IO操作結果

# IO操作完成後線程才能繼續執行:

do_some_code(r)

    2)異步IO

當代碼需要執行一個耗時的IO操作時,它只發出IO指令,並不等待IO結果,然後就去執行其他代碼了。一段時間後,當IO返回結果時,再通知CPU進行處理

異步IO模型需要一個消息循環,在消息循環中,主線程不斷地重複“讀取消息-處理消息”這一過程

loop = get_event_loop() # 創建一個事件loop

while True:

    event = loop.get_event() # get_event() 獲取外部事件

    process_event(event) #處理事件

當遇到IO操作時,代碼只負責發出IO請求,不等待IO結果,然後直接結束本輪消息處理,進入下一輪消息處理過程。當IO操作完成後,將收到一條“IO完成”的消息,處理該消息時就可以直接獲取IO操作結果

 

在異步IO模型下,一個線程可以同時處理多個IO請求,並且沒有切換線程的操作。對於大多數IO密集型的應用程序,使用異步IO將大大提升系統的多任務處理能力。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章