redis为什么是单线程?在多核处理器下对主存的访问真的比多线程更有效率?未来有可能改用多线程吗?

 我来答
百度网友d13ef98adca
2018-03-21 · 贡献了超过161个回答
知道答主
回答量:161
采纳率:0%
帮助的人:5.1万
展开全部

在一定程度上,多线程确实有优势

但不是一个简单的多线程,但每个线程都有自己的epoll模型,即多线程和混合多路复用。

我们通常以“但是”开头。但是,还要考虑Redis操作的对象。

它对内存中的数据结构进行操作。如果在多个线程中操作,则需要锁定对象。

最终,多线程性能得到了提高,但每个线程的效率显著下降。

这个程序的逻辑是非常复杂的

并不完全知道复述,数据结构简单的键-值,列表,散列,地图等等复杂的结构,这个结构可能非常细粒度的操作,比如添加一个元素的后面长列表,添加或删除一个对象的散列,等等。

这些操作也可以合成多/执行组。

这样的操作可能需要大量的锁,从而导致同步开销显著增加。

这也会增加吞吐量,但是响应延迟可能会增加。

Redis的选择是使用单个线程来突出其功能的灵活性。

单个线程上的任何原子操作都可以在几乎不需要成本的情况下实现,而且这样一个复杂的数据结构可以很容易地使用,即使有Lua脚本这样的功能。

这就要求多线程的价格要高得多

不是所有的KV数据库或内存数据库都应该是单线程的,比如ZooKeeper,它是多线程的,最终取决于作者自己的意愿和权衡。

单线程电源实际上非常强大,而且每个核心效率都非常高。

在今天的虚拟化环境中,您可以充分利用云环境来提高资源利用率。

多线程自然是能够比单线程更高的性能限制,但在今天的计算环境中,即使是一个多线程的天花板也常常不能满足需要,需要进一步摸索更多的服务器集群方案。

多线程技术的方案还在不在,所以单线程,进程集群不失为一个现代的解决方案。

睫毛柳
2018-03-21 · 贡献了超过237个回答
知道答主
回答量:237
采纳率:0%
帮助的人:23.2万
展开全部

我觉得你要是提这个问题说明你有一套固化的思维,所以我认为你这几个问题我还是可以帮你回答的。

单线程的选择

在权衡是使用一个线程来突出其自身功能的灵活性,Redis的选择。在单线程的基础上,任何原子操作都可以在几乎没有成本的情况下实现。如何在复杂的数据结构,可以很容易地应用,甚至使用Lua脚本的功能。多线程的价格要高得多。单线程的威力实际上非常强大,每核心效率也非常高,在今天的虚拟化环境当中可以充分利用云化环境来提高资源利用率。

对象的考虑

考虑使用对象操作。它运行的对象是内存中的数据结构。如果在多线程中操作,则需要锁定这些对象。最后,多线程性能得到改善,但每个线程的效率却严重下降。这个程序的逻辑很复杂。

程序多样执行

要知道redis数据结构不是一个简单的核心价值,还有列表,hash,map和一系列复杂的结构,这些结构可能是非常精细的操作,如添加一长串后面的一个元素,添加或删除一个对象的哈希值,等等。这些操作还可以合成一组多个/多个执行程序。在这样的操作中可能需要大量的锁,导致同步开销显著增加。一个糟糕的结果是吞吐量增加,但是响应延迟可能增加。

总结:我觉得未来也会是单线程的发展,而且越来越精细了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式