标签:为什么 这么 单线程 Redis 内存 多线程 CPU 客户端
Redis快的原因
多线程不一定都不比单线程快!多线程不一定都不比单线程快!多线程不一定都不比单线程快!重要的事情说三遍。这也就是为什么我们在配置线程池的时候,要尽量配置成CPU密集型的原因。(避免频繁的上下文切换)。
我们知道,在从硬件的角度来看,CPU的速度>内存速度>硬盘速度。redis的操作都是基于内存的,绝大部分请求是纯粹的内存操作,非常迅速,使用单线程可以省去多线程时CPU上下文会切换的时间,也不用去考虑各种锁的问题,不存在加锁释放锁操作,没有死锁问题导致的性能消耗。因此,Redis让一个线程开足马力的干活儿效率是非常恐怖的。
我们客户端发送一条指令到 Redis执行,整体效率除了Redis本身的执行效率外,还存在中间的网络IO问题。作为一个分布式环境中常常使用的缓存,那么它总是面向许多客户端的。那么当多个客户端并发向Redis请求处理任务时,Redis该如何处理呢?
多路复用的简单理解
首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现的。
Redis快的原因总结
- Redis使用C语言实现,一般来说C语言实现的程序"距离"操作系统更近
- Redis数据类型都很简单,使用hash结构存储数据,最佳时间复杂度为O(1)。。
- Redis基于内存操作,因此采用单线程的结构实现,可以省去多线程时CPU上下文会切换的时间,也不用去考虑各种锁的问题。可以高效地使用CPU。
- 在与多客户端之间的通讯采用非阻塞的IO多路复用模型
标签:为什么,这么,单线程,Redis,内存,多线程,CPU,客户端 来源: https://blog.csdn.net/weixin_47184173/article/details/117652749
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。