IO與NIO的區別

2021-07-28 12:52:12 字數 760 閱讀 6050

一:實現方式

傳統io:

1.傳統的socket io當客戶端和服務端連線成功後,服務端在進行讀取客戶端傳送的資訊的時候是通過新建執行緒來處理的,由此帶來了乙個問題,當有大量客戶端想服務端傳輸資料的時候,服務端就會啟動大量執行緒,這樣將大大的增加了伺服器的壓力。

2.同時,傳統io通訊是阻塞的,即在讀取和寫入過程如果未完成,它便會阻塞不會繼續執行下面的邏輯。

3.傳統的io採用的是tcp直連的方式,客戶端和服務端建立連線效率較低。

nio

1.nio提出了乙個selector(多路復用器)的東東。正是因為這個東東的存在,在客戶端和服務端進行網路通訊的時候不再需要新建執行緒。

2.nio有個管道(channel)的東西,當客戶端和服務端進行連線的時候不在是採用直連的方式,而是服務端將客戶端的管道註冊到selector中,同時這個管道還有乙個狀態碼。selector會不斷的去遍歷存在於它當中的管道,並通過這些管道的狀態碼判斷哪些是可讀的,哪些是可寫的。相當於將io當中分散的處理過程集中處理了,這樣就可以在乙個執行緒中處理原本需要多個執行緒處理的事情了。

二:總結

1.從以上說明可以看出,傳統的io因為每次通訊都會建立乙個執行緒,所以系統資源消耗過大。而nio採用selector機制,很好的避免了這個問題。

2.傳統io資料讀取寫入過程是阻塞的,nio則是阻塞的

3.nio解決了傳統io直連的方式,增強了通訊的效率

io與nio的區別

傳統的socket io中,需要為每個連線建立乙個執行緒,當併發的連線數量非常巨大時,執行緒所占用的棧記憶體和cpu執行緒切換的開銷將非常巨大。使用nio,不再需要為每個執行緒建立單獨的執行緒,可以用乙個含有限數量執行緒的執行緒池,甚至乙個執行緒來為任意數量的連線服務。由於執行緒數量小於連線數量,所...

nio與io的比較

nio是new io的簡稱,從jdk1.4就被引入了。現在的jdk已經到了1.6了,可以說不是什麼新東西了。但其中的一些思想值得我來研究。這兩天,我研究了下其中的套接字部分,有一些心得,在此分享。首先先分析下 為什麼要nio套接字?nio的主要作用就是用來解決速度差異的。舉個例子 計算機處理的速度,...

epoll nio區別 NIO 非阻塞的IO

一.nio相對於bio來說,是新io,或者非阻塞io,是核心系統公升級後產物 上面 我們看到,serversocketchannel.accept 設定成非阻塞後,如果沒有客戶端連線,會不停地死迴圈執行。同理,socketchannel.configureblocking false socketc...