面試 = 水平測試,並非面試官要爲難你,是要肯定你的水平react
這幾個題,講的很全面,言簡意賅。而且對問題有深度。redis
I/O多路複用技術(multiplexing)是什麼?服務器
專門針對I/O多路複用技術作了瞭解,由於對Linux底層技術不瞭解,這裏有個例子,算是明白了I/O多路複用是幹嗎的了。數據結構
=========多線程
下面舉一個例子,模擬一個tcp服務器處理30個客戶socket。假設你是一個老師,讓30個學生解答一道題目,而後檢查學生作的是否正確,你有下面幾個選擇:併發
這種就是IO複用模型,Linux下的select、poll和epoll就是幹這個的。將用戶socket對應的fd註冊進epoll,而後epoll幫你監聽哪些socket上有消息到達,這樣就避免了大量的無用操做。此時的socket應該採用非阻塞模式。異步
這樣,整個過程只在調用select、poll、epoll這些調用的時候纔會阻塞,收發客戶消息是不會阻塞的,整個進程或者線程就被充分利用起來,這就是事件驅動,所謂的reactor模式。socket
================tcp
本身的理解:
Redis是採用TCP鏈接的,鏈接TCP的socket在全部數據準備好以前,socket不可用。請求是進來了,數據包還不完整,因此還不能處理這個請求。
那麼對於已經準備數據包的socket,Redis線程能夠一次性這些請求都接收來,而後去內存處理。都處理完後,將結果再都帶回到socket。接下來再去處理準備好的socket。
因此redis的多路複用,不是每個請求處理一次,而是一次處理多個請求。因此純內存操做的單線程,效率也很高。