【发布时间】:2018-06-10 15:56:42
【问题描述】:
我目前正在尝试了解 Redis 的一些基本实现。我知道redis是单线程的,我已经偶然发现了以下问题:Redis is single-threaded, then how does it do concurrent I/O?
但我仍然认为我没有正确理解它。 Afaik Redis 使用一个单线程的反应器模式。因此,如果我理解这一点,就会有一个观察者(处理 FD/传入/传出连接)将要完成的工作委托给它的已注册事件处理程序。他们做实际的工作并设置例如。他们的响应作为事件发送给观察者,观察者将响应传回给客户端。但是,如果客户端的请求 (R1) 需要大约 1 分钟会发生什么。另一个客户端创建另一个(快速)请求(R2)。然后 - 由于 redis 是单线程的 - 在 R1 完成之前,不能将 R2 委托给正确的处理程序,对吗?在多线程环境中,您可以只在单个线程中启动每个处理程序,因此“主”线程只是接受和响应 io 连接,所有其他工作都在自己的线程中执行。
如果它真的只是对 io 处理和处理程序逻辑进行排队,它永远不会这么快。我在这里错过了什么?
【问题讨论】:
标签: multithreading redis reactor single-threaded