BIO、NIO、AIO 有什麼區別?

轉載:https://blog.csdn.net/haogexiaole/article/details/86499782

BIO、NIO、AIO 的區別

在看BIO、NIO、AIO的區別之前,需要弄明白同步和異步以及阻塞和非阻塞。

同步和異步

同步是指發送一個請求,然後等待請求返回才能發送下一個請求,任務必須等待然後一個一個做。
異步是指發送一個請求,觸發了IO之後,可以去發送下一個請求,任務無需等待,發送完請求可以做其他事了。

阻塞和非阻塞

阻塞:阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之後纔會返回。
非阻塞:非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。

BIO 同步阻塞I/O

BIO在工作時,當一個任務完成之後再去做另外一件任務,但是當系統需要同時完成很多任務的時候,就需要系統創建很多線程來完成對應的工作,因爲BIO模型下一個線程同時只能做一個工作,如果線程在執行過程中依賴於需要等待的資源,那麼該線程會長期處於阻塞狀態,在cpu的不斷切換中,會大大降低執行效率

NIO同步非阻塞I/O

在BIO模型中,如果需要併發處理多個I/O請求,那就需要多線程來支持,NIO使用了多路複用器機制,以socket使用來說,多路複用器通過不斷輪詢各個連接的狀態,只有在socket有流可讀或者可寫時,應用程序才需要去處理它,在線程的使用上,就不需要一個連接就必須使用一個處理線程了,而是只是有效請求時(確實需要進行I/O處理時),纔會使用一個線程去處理,這樣就避免了BIO模型下大量線程處於阻塞等待狀態。

AIO 異步非阻塞I/O

從編程模式上來看AIO相對於NIO的區別在於,NIO需要使用者線程不停的輪詢IO對象,來確定是否有數據準備好可以讀了,而AIO則是在數據準備好之後,纔會通知數據使用者,這樣使用者就不需要不停地輪詢了。

BIO是一個連接一個線程。

NIO是一個請求一個線程。

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