概述
Redis为什么设计成单线程
在回答这几个问题之前先问几个问题
1 多线程的本质是什么?
多线程的本质其实还是单线程,因为在任一个时间点其实只有一个线程在抛,
只不过CPU切换线程速度太快,让我们感觉是多个线程在一起跑,其实所有的指令还是一个接着一个的跑的。
2 多线程一定比单线程快么?
答案肯定是否定的了
线程快,是因为其降低了不必要的耗时,耗时其实主要集中在两大块 磁盘IO 线程切换
磁盘IO耗时远远大于线程切换耗时
多线程有助于降低磁盘IO耗时
单线程没有线程切换耗时
日常开发涉及磁盘IO因此使用多线程,磁盘IO的耗时危害已经将线程切换的危害忽略了,因此会觉得多线程快.
Redis中没有磁盘IO,使用单线程没有CPU切换耗时,也不用考虑同步锁问题,因此速度更快
多线程,CPU进行线程切换的时候,线程是阻塞的,这时候线程不会运行,进入阻塞状态,会有CPU切换耗时
看到这里我们一定会觉得那为啥不用单线程呢,单线程就不用切换了,按照正常逻辑确实是这样子的
这也是为啥redis使用单线程的原因.没有了线程切换的等待,一路畅通无阻。
那为啥我们日常开发中会使用多线程呢,还觉得多线程用起来比单线程快是落实当然,振振有词。
答案在这里,我们日常开发中经常会对磁盘进行读写,磁盘读写这玩意儿耗时超级长,属于机械寻址,
内存寻址的速度是机械寻址的10万倍到50万倍,你就知道多慢了,在磁盘IO的过程中,当前线程是阻塞
的,如果你使用1个线程,那么这么长的时间你将啥事都没法做
打个比方,磁盘IO耗时1000s,线程切换1s,磁盘IO的耗时的时间远远超过了线程切换,这时采用多线程,
线程1在1000s等待过程中,给切到线程2,花费1s,这时候反正他不会动,999s内2先激活,然后再切换,这样在
线程1的1000s期间我们可以启动好多的线程,花费的时间还都是他本来就该阻塞的时间,多好,一举两得,然后N个线程都等
1000s,而且这些线程等待的时间还重叠了,省了超级多的时间,效率提升.
参考文献
https://baijiahao.baidu.com/s?id=1628498089535886382&wfr=spider&for=pc
最后
以上就是谨慎酸奶为你收集整理的Redis为什么设计成单线程的全部内容,希望文章能够帮你解决Redis为什么设计成单线程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复