1. 程式人生 > >netty 一之IO模型

netty 一之IO模型

專案總用到了netty框架,看了與netty相關的基礎知識,netty中用到了NIO,如何理解NIO,這就需要先理解I/O模型

I/O模型有5種I/O模型,借用釣魚的故事比較通俗易懂。

有以下五種釣魚方式:

王鐵錘

他先給魚竿上放好魚餌,然後就坐在自己的小板凳上,眼睛一直瞪著魚竿的盡頭。等到魚上鉤後,自己收竿把魚放在桶裡。

李狗蛋

他也和王鐵錘一樣,上好魚餌之後就等魚上鉤。但他的做法是一邊玩手機,一邊瞄著魚竿是否有動靜,還不時的和王鐵錘搭訕,但王鐵錘並不理他,因為他在一動不動的盯著魚竿,不能分心。

趙二毛

但他多拿了一樣東西———鈴鐺,他把鈴鐺系在魚竿上,然後坐在小板凳上,拿出了一本《C和指標》看起了書,這樣鈴鐺一響就直接收竿。嗯,文化人就是不一樣。

劉翠花

但她放了個大招,直接拿了100多隻魚竿,全固定在岸邊。這樣幾乎不用等,水池邊全是她收竿的身影。不一會兒,就釣了好幾桶魚。

王老五

吩咐司機讓他去釣魚,釣到了魚就打電話通知他。只能說,有錢人就是不一樣。

上面五種釣魚方式就是對應的5種I/O模型

1. 阻塞IO

阻塞式等待IO事件,在等的過程中不能做其他事。

2. 非阻塞IO

非阻塞等待,不斷檢測IO事件是否就緒。沒有就緒就可以做其他事。

3. 訊號驅動IO

將釣是否就緒的資訊轉移到訊號函式上,不用自己檢測事件就緒,事件就緒時會受到訊號,處理I/O事件。

4. IO複用/多路轉接IO (非同步阻塞I/O)

即經典的Reactor設計模式,Java中的Selector和Linux中的epoll都是這種模型,有時也稱為非同步阻塞IO。

5. 非同步IO (非同步非阻塞I/O)

使用者程序只需要發起一個IO操作然後立即返回,等IO操作真正的完成以後,應用程式會得到IO操作完成的通知,也稱為非同步非阻塞IO

注意:

前4種模型都有等和IO兩個階段,並將資料從核心拷貝到呼叫者的緩衝區,自己等,自己進行資料搬遷。所以統稱為同步IO。 與第5種非同步IO相區分。

 

NIO

java中的NIO屬於第4種I/O模型,即多路複用I/O(非同步阻塞I/O)

 

參考:

https://blog.csdn.net/summy_J/article/details/74474902

https://zhidao.baidu.com/question/1866342019599516227.html

https://blog.csdn.net/qq_25872739/article/details/65934828