Redis 爲何是單線程的?爲何單線程還那麼快?

可能對於redis的是單線程的都知道,可是若是被問到爲何是單線程?爲何單線程還那麼快?可能會忽然的一臉懵逼。本片博客主要整理一下這兩個問題。web

Redis問什麼是單線程?

官網
redis官網有關於redis常見問題的回答,從這個問題咱們能夠了解到一下重點:
1.CPU不是redis的瓶頸
2.redis的瓶頸主要在內存大小和網絡的快慢
3.redis的tps能達到百萬級(這已經夠快了)
那麼問題又來了,好比個人電腦或者服務器是多核的,那豈不是不能充分利用CPU?
是能夠充分利用的。能夠啓動多個redis,只須要使用的時候知道存在哪一個redis上就能夠了。
其實官網想表達的意思就是:單線程已經夠快了,因此不用多線程。redis

Redis是單線的,可是爲何還那麼快?

若是單線程的緣由是由於它已經夠快了,那麼是否是感受有點不太合理,由於日常咱們都是經過多線程來提升效率的,那麼redis爲何那麼快呢?
Redis整體快的緣由:
1.徹底基於內存的
2.採用單線程,避免沒必要要的上下文切換可競爭條件
3.數據簡單,數據操做也相對簡單
4.使用多路I/O複用模型,非阻塞IO服務器

可能前三個都還理解,主要是第四個可能須要着重理解一下:
多路I/O複用模型是利用select、poll、epoll能夠同時監察多個流的IO事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或者多個流的IO事件時,就從阻塞狀態中喚醒,因而程序就會輪訓一遍全部的流(epoll是隻輪訓發出了事件的流),而且只一次按順序的處理就緒的流,這種作法就避免了大量的無用操做,這裏的「多路」是指多個網絡鏈接,「複用」是指複用同一個線程,採用多路IO複用技術可讓單個線程高效的處理多個鏈接請求網絡

以上就是整理的redis爲何是單線程以及單線程爲何那麼快的緣由多線程