Redis是單線程
Redis單線程是指Redis的網絡IO和鍵值對讀寫是由一個線程完成的,其他功能還是使用多線程執行
Redis主干業務使用單線程的原因
Redis本質就是一個大的共享資源,共享資源是需要對其進行并發控制的,即使增加了線程,大部分線程也是在等待互斥鎖,并行變串行,而且還需要進行并發控制,反而效率變慢了
所以Redis網絡IO和鍵值對讀寫采用單線程反而效率是最高的
Redis性能高的原因
1、Redis的大部分操作在內存上完成,再加上它采用了高效的數據結構
2、Redis采用多路復用機制,其在網絡IO操作中能并發處理大量的客戶端請求,實現高吞吐率
Redis多路復用機制運行過程
Redis是使用網絡IO進行數據請求和返回的,網絡IO中socket由分為讀和寫
socket和線程是兩個概念,可以理解為socket是一個網絡通信的通道提供讀寫操作的,線程是處理這些操作的
傳統堵塞IO,是Redis需要處理完一個socket請求,等待它返回,最后得到結果,再處理下一個
傳統非阻塞IO則是一直遍歷socket請求是否成功,如果成功就返回,如果失敗不返回,一直輪詢,最早的Redis就是采用的這一方式
現在的多路IO復用是指我現在使用單線程管理多個socket,使用事件監聽的方式監聽每個socket,那個socket可以返回數據了,就直接使用內核通知線程返回