1. 程式人生 > >Redis為何是單線程的

Redis為何是單線程的

cpu source CA 核心 多個 高性能 pan ace 就是

以前一直有個誤區,以為:高性能服務器 一定是 多線程來實現的

原因很簡單因為誤區二導致的: 多線程 一定比 單線程 效率高。其實不然。

redis 核心就是 如果我的數據全都在內存裏,我單線程的去操作 就是效率最高的,為什麽呢,因為多線程的本質就是 CPU 模擬出來多個線程的情況,這種模擬出來的情況就有一個代價,就是上下文的切換,對於一個內存的系統來說,它沒有上下文的切換就是效率最高的。redis 用 單個CPU 綁定一塊內存的數據,然後針對這塊內存的數據進行多次讀寫的時候,都是在一個CPU上完成的,所以它是單線程處理這個事。在內存的情況下,這個方案就是最佳方案 —— 阿裏 沈詢

因為一次CPU上下文的切換大概在 1500ns 左右。

從內存中讀取 1MB 的連續數據,耗時大約為 250us,假設1MB的數據由多個線程讀取了1000次,那麽就有1000次時間上下文的切換,

那麽就有1500ns * 1000 = 1500us ,我單線程的讀完1MB數據才250us ,你光時間上下文的切換就用了1500us了,我還不算你每次讀一點數據 的時間,

Redis為何是單線程的