上一篇 <<<select、poll、epoll的區(qū)別
下一篇 >>>Netty初識(shí)
a、首先Redis官方網(wǎng)站是沒(méi)有windows版本的,只有l(wèi)inux版本的redis
b、redis的底層是采用NIO的多路IO復(fù)用機(jī)制實(shí)現(xiàn)對(duì)不同的tcp鏈接實(shí)現(xiàn)io復(fù)用,能否非常好的支持高并發(fā),同事能夠先天性支持線程安全問(wèn)題。
--多路IO復(fù)用機(jī)制:使用一個(gè)線程維護(hù)多個(gè)不同的IO操作,原理是使用Nio的選擇器,將多個(gè)不同的Channel(TCP通道)統(tǒng)一交給我們的Selector選擇器管理,減少了資源的浪費(fèi)
c、NIO在不同的操作系統(tǒng)上實(shí)現(xiàn)方式是不同的
Windows系統(tǒng)使用Selector實(shí)現(xiàn)輪詢機(jī)制,時(shí)間復(fù)雜度為O(n),而且還存在空輪詢的情況,效率非常低;其次是默認(rèn)對(duì)我們的輪詢數(shù)據(jù)有一定限制1024,所以支持上萬(wàn)TCP鏈接非常難。
Linux操作系統(tǒng)采用epoll實(shí)現(xiàn)事件驅(qū)動(dòng)通知形式,不會(huì)存在空輪訓(xùn)的情況,只對(duì)活躍的socket鏈接實(shí)現(xiàn)主動(dòng)回調(diào),在性能上有大大的提升,事件復(fù)雜度為O(1)
所以nginx支持5W的并發(fā)量,以及Redis能夠有非常高的并發(fā)量,都是使用了Linux中的IO多路復(fù)用機(jī)制epoll。
推薦閱讀:
<<<OSI七層模型與層上協(xié)議
<<<TCP的三次握手建立鏈接和四次揮手釋放鏈接
<<<TCP、UDP及Socket代碼示例
<<<Https的1.0、2.0協(xié)議及長(zhǎng)短鏈接區(qū)別
<<<Linux系統(tǒng)的五種IO模型
<<<BIO和NIO區(qū)別
<<<BIO模型的缺陷
<<<NIO模式的IO多路復(fù)用底層原理
<<<select、poll、epoll的區(qū)別
<<<Netty初識(shí)
<<<Netty的粘包和拆包問(wèn)題分析
<<<粘包和拆包問(wèn)題解決方案匯總
<<<序列化與反序列化知識(shí)點(diǎn)匯總
<<<MessagePack反序列化使用示例
<<<Marshalling在Netty中的使用