Redis为什么是单线程
2017-01-24 11:19
176 查看
单纯的网络IO来说,量大到一定程度之后,多线程的确有优势, 但并不是单纯的多线程,而是每个线程自己有自己的epoll这样的模型,
也就是多线程和multiplexing混合。但是。还要考虑Redis操作的是内存中的数据结构。如果在多线程中操作,那就需要为这些对象加锁。
所以使用多线程可以提高性能,但是每个线程的效率严重下降了,而且程序的逻辑严重复杂化。Redis的数据结构并不全是简单的Key-Value,
还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除
一个对象,这些操作还可以合成MULTI/EXEC的组。这样一个操作中可能就需要加非常多的锁,导致的结果是同步开销大大增加。Redis
在权衡之后的选择是用单线程,突出自己功能的灵活性。在单线程基础上任何原子操作都可以几乎无代价地实现,多么复杂的数据结构都
可以轻松运用,甚至可以使用Lua脚本这样的功能。对于多线程来说这需要高得多的代价。
并不是所有的KV数据库或者内存数据库都应该用单线程,比如ZooKeeper就是多线程的,最终还是看作者自己的意愿和取舍。单线程
的威力实际上非常强大,每核心效率也非常高,在今天的虚拟化环境当中可以充分利用云化环境来提高资源利用率。多线程自然是可以比单
线程有更高的性能上限,但是在今天的计算环境中,即使是单机多线程的上限也往往不能满足需要了,需要进一步摸索的是多服务器集群化
的方案,这些方案中多线程的技术照样是用不上的,所以单线程、多进程的集群不失为一个时髦的解决方案。
作者:灵剑
链接:https://www.zhihu.com/question/23162208/answer/142424042
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
也就是多线程和multiplexing混合。但是。还要考虑Redis操作的是内存中的数据结构。如果在多线程中操作,那就需要为这些对象加锁。
所以使用多线程可以提高性能,但是每个线程的效率严重下降了,而且程序的逻辑严重复杂化。Redis的数据结构并不全是简单的Key-Value,
还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除
一个对象,这些操作还可以合成MULTI/EXEC的组。这样一个操作中可能就需要加非常多的锁,导致的结果是同步开销大大增加。Redis
在权衡之后的选择是用单线程,突出自己功能的灵活性。在单线程基础上任何原子操作都可以几乎无代价地实现,多么复杂的数据结构都
可以轻松运用,甚至可以使用Lua脚本这样的功能。对于多线程来说这需要高得多的代价。
并不是所有的KV数据库或者内存数据库都应该用单线程,比如ZooKeeper就是多线程的,最终还是看作者自己的意愿和取舍。单线程
的威力实际上非常强大,每核心效率也非常高,在今天的虚拟化环境当中可以充分利用云化环境来提高资源利用率。多线程自然是可以比单
线程有更高的性能上限,但是在今天的计算环境中,即使是单机多线程的上限也往往不能满足需要了,需要进一步摸索的是多服务器集群化
的方案,这些方案中多线程的技术照样是用不上的,所以单线程、多进程的集群不失为一个时髦的解决方案。
作者:灵剑
链接:https://www.zhihu.com/question/23162208/answer/142424042
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
相关文章推荐
- redis为什么是单线程
- Redis 为什么使用单进程单线程方式也这么快
- [置顶] Redis为什么使用单进程单线程方式也这么快
- Redis为什么使用单进程单线程方式也这么快
- redis是个单线程的程序,为什么会这么快呢?每秒10000?这个有点不解,具体是快在哪里呢?EPOLL?内存?
- 为什么说Redis是单线程的?
- Redis是单线程的以及Redis为什么这么快
- 单线程的redis为什么达到每秒万级的处理速度?
- 单线程的REDIS为什么这么快?
- Redis为什么是单线程
- Redis为什么使用单进程单线程方式也这么快
- 单进程单线程的Redis如何能够高并发,redis是个单线程的程序,为什么会这么快呢?
- 为什么说Redis是单线程的以及Redis为什么这么快!(转)
- 10033---Redis 为什么使用单进程单线程方式也这么快
- redis是个单线程的程序,为什么会这么快呢?
- 为什么说Redis是单线程的以及Redis为什么这么快!
- 为什么说Redis是单线程的以及Redis为什么这么快!
- Redis为什么使用单进程单线程方式
- redis是单线程的,为什么存取很快
- Redis为什么使用单进程单线程方式也这么快