redis 爲什麼說是單線程的理解

這篇文章講的不錯。

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的)

 

 

 

 

 

 

 

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