Ale*_*ayr 3 multithreading reactor single-threaded redis
我目前正在尝试了解Redis的一些基本实现。我知道 redis 是单线程的,我已经偶然发现了以下问题:Redis 是单线程的,那么它如何进行并发 I/O?
但我仍然认为我没有理解它。Afaik Redis 使用一个单线程的反应器模式。因此,如果我理解正确,那么有一个观察者(处理 FD/传入/传出连接)将要完成的工作委托给它注册的事件处理程序。他们做实际的工作并设置例如。他们的响应作为事件给观察者,观察者将响应传输回客户端。但是如果客户端的请求 (R1) 花费大约 1 分钟会发生什么。另一个客户端创建另一个(快速)请求 (R2)。然后 - 由于 redis 是单线程的 - 在 R1 完成之前,不能将 R2 委托给正确的处理程序,对吗?在多线程环境中,您可以在单个线程中启动每个处理程序,因此“主”
如果它真的只是将 io 处理和处理程序逻辑排队,那么它永远不会那么快。我在这里缺少什么?
除了 Redis 中的大多数操作在不到 ~ 毫秒 ~ 几微秒内完成这一事实之外,你没有遗漏任何东西。长时间运行的操作确实在执行期间阻塞了服务器。