關於同步/異步/阻塞/非阻塞IO的理解

  1. IO 指的是數據的讀寫,數據在存儲介質或網絡上的讀寫。

  2. 阻塞IO與非阻塞IO 指的是兩種讀寫IO數據的方式,是以對數據讀寫這個動作 (方法/函數/過程)是否立即返回結果來區分,阻塞不會立即返回結果,這往往會造成當前觸發(調用)此動作(方法/函數/過程)的線程掛起(阻塞),非阻塞IO則會立即返回結果(是否讀取成功),線程不會被掛起(阻塞)。

  3. 異步IO與同步IO 指的是當前線程是否需要自己處理IO讀寫的相關過程(IO數據的輪詢和複製),同步IO需要當前線程自己處理,而異步IO不需要自己處理,而是將這任務交給操作系統內核,內核創建新的線程去做個任務,任務完成(將IO數據複製到使用異步IO的線程的數據空間)再通知異步IO線程去對數據進行下一步處理。

  4. 同步阻塞IO 指的是使用同步IO的線程自己使用阻塞IO這樣的讀寫數據方式去讀寫數據,不需要輪詢數據是否準備好,因爲阻塞IO會阻塞當前線程直到讀取到數據並返回。

  5. 同步非阻塞IO 指的是使用同步IO的線程自己使用非阻塞IO這樣的讀寫數據方式去讀寫數據,由於非阻塞IO不阻塞線程,立即返回讀取數據結果,這個結果可能失敗可能成功,所以需要當前線程不時輪詢這個結果,並在成功的狀態下自己再將數據複製到本線程數據空間以便使用。

  6. 異步阻塞IO 指的是使用異步IO的線程自己將IO請求即讀寫數據的的任務請求給操作系統內核,操作系統內核新建一個線程來完成這個任務,並且這個線程使用阻塞IO方式來讀寫數據,所以只有這個線程會被阻塞,在讀寫成功之後,通知使用異步IO的線程自己將數據複製到它的線程數據空間。

  7. 異步非阻塞IO 則更進一步,內核創建的線程使用非阻塞IO來讀寫數據,並且數據的複製也由一併完成,使用異步非阻塞IO的線程最後只等待操作系統通知它是否可以直接開始使用數據。

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