這篇文章講的不錯。
https://www.cnblogs.com/myseries/p/11733861.html
我個人再對圖片裏講的進行梳理:
1、客戶端請求建立連接、接收請求數據等等,都是通過非阻塞IO(多路複用IO)進行的,這樣在單個線程處理中可以大大的節省時間。
(JAVA NIO建議學習一下,就應該能明白這邊的意思。我只會JAVA NIO,就用NIO講,原理是一樣的)
(1)客戶端請求建立連接的多路複用就是把ServerSocketChannel註冊到選擇器中,綁定accept事件。當觸發accept事件時,就可以獲取到SocketChannel。
(2)接收請求數據的多路複用是把SocketChannel註冊到選擇器中,綁定read事件,當選擇器檢測到相應的通道已準備好進行讀取,則觸發read事件,可以通過相關的SocketChannel讀取數據,然後處理數據。
(4)處理完成後,在把SocketChannel綁定到一個新的選擇器中,綁定write事件,等可以寫時,就把數據發送出去。
上面的都是在一個線程中完成,像redis單線程處理,上述操作全都可以最大化利用單線程cpu性能。。
如果忘記了NIO怎麼用,可以通過這篇文章的代碼複習一下:https://www.cnblogs.com/yueweimian/p/6262211.html
(僅僅只是複習JAVA NIO的)