Redis IO模型
redis多线程模型
单线程redis的优势
在一定线程数内,线程越多,系统吞吐量越高,但再进一步增加纯种,系统的吞吐就增长迟缓,甚至是下降。
这是因为cpu性能过消耗在线程上下文切换和多线程共享资源并发访问控制上。
为什么单线程redis那么快?
一方面,redis的大部分操作是内存操作,采用高效的数据结构,如hash表和跳表
另一方面,redis使用多路复用的io模型,使其在网络io操作中能并发处理大量的客户端请求,实现高吞吐。
如上,把io事件交给 多个io线程和workder线程并行执行,使得redis worker线程计算的连续,在多核心多cpu环境下性能提升明显。
用户1,2,3,4的请求和返回并不一定有序,也就是说1先请求,并不一定1先返回,这是受制Io读的速度。但一个用户的请求,内部一定是有序的,读-计算-写,且单次io的channel会绑定在io线程,不会有多个线程执行单次读写io。