目标
解释redis单线程,性能高的原因
分析
- 性能高原因
1.单线程,减少线程上下文切换,没有多线程的各种锁问题
2.内存操作,速度快,减少网络传输带了的损耗
3.使用多路 I/O 复用模型,多路 I/O 复用模型是利用select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈).
- 缺点:
1.不能充分利用多核cpu资源,所以经常会单服务其可以部署多节点来充分利用系统资源.
附其他常见模式
多进程单线程模型:Nginx
单进程多线程模型:Memcached
扩展:
针对多路复用实现的异步非阻塞模型的知识补充:
-
同步阻塞
用户线程同步阻塞不干别的,同步等待系统内核返回数据 -
同步非阻塞
用户线程等待内核返回数据的同时干别的事情,同步一直轮询查系统内核是否准备好数据 -
异步阻塞
用户线程等待内核通知数据处理完好后才会去干别的事情,异步指系统内容数据处理好后会通知用户来处理 -
异步非阻塞
用户线程等待内核通知数据处理完好的同时干别的事情,异步指系统内容数据处理好后会通知用户来处理.
看下时序图说明:
io模型
参考博客:
https://blog.csdn.net/zk3326312/article/details/79400805
https://www.cnblogs.com/syyong/p/6231326.html
网友评论